热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对对象C++进行排序

如何解决《对对象C++进行排序》经验,为你挑选了1个好方法。

我有一个项目,我有一个包含机器人对象的游戏文件.游戏文件使用地图保存机器人对象.地图包含机器人的名称作为键,值是机器人对象.

机器人在2D空间中,并且它们具有x,y以找到它们的当前位置.

我必须实现的功能之一是通过查找机器人与原点(0,0)的距离,将机器人从最小到最大排序.

这是我的地图:

 std::map robot_map;

我使用名称和两个变量初始化机器人以了解位置,并使用第三个变量来查找所采取的步骤总数:

robot::robot(const string &n) : robot_name(n) { x = 0, y = 0, t = 0; }

为了检查机器人与原点的距离我使用:

 std::string game::furthest() const
    {
    int furthest = 0;
    std::string max_name; 

    typedef std::map::const_iterator iter;
    for (iter p = robot_map.cbegin(); p != robot_map.cend(); ++p) {

        if (distance(p->second) > furthest) {
            furthest = distance(p->second);
            max_name = p->first;
        }
    }

    return max_name;
    }

这是距离函数:

int distance(const robot &r) {
    int distance;
    int y = r.north();
    int x = r.east();

    distance = abs(x - 0) + abs(y - 0);

    return distance;
}

在我的上一个函数中,我想在向量中对它们进行排序,这就是我目前所拥有的:

std::vector game::robots_by_travelled() const
{
    std::vector robots;


    int furthest = 0;

    typedef std::map::const_iterator iter;

    for (iter p = robot_map.cbegin(); p != robot_map.cend(); ++p) {
        robots.push_back(p->second);
    }


    return robots;
    ;
}

有没有办法按照距离原点(0,0)的距离对矢量进行排序?



1> molbdnilo..:

是的,有std::sort任何适当的关系:

std::sort(robots.begin(), 
          robots.end(),
          [](const robot& lhs, const robot& rhs) 
            { return distance(lhs) 

或者,如果你想要一个可重用的谓词:

bool closer(const robot& r1, const robot& r2)
{
    return distance(r1) 

可以重载<操作员,然后说

std::sort(robots.begin(), robots.end());

但是当你的对象有意义地被称为彼此"小于"并且你想<在其他情况下也是如此时更有意义.


推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 题目描述http:acm.nyist.netJudgeOnlineproblem.php?pid306Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场 ... [详细]
  • AtonepointIhadlookedatimplementingaclasstemplateinC++thatwouldsupportanEnumthatwo ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • #define_CRT_SECURE_NO_WARNINGS#includelist.h#includevoidSListInit(PNode*pHead ... [详细]
author-avatar
安徒生童话13
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有