Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sort std::使用运算符()设置插入顺序_C++_Sorting - Fatal编程技术网

C++ sort std::使用运算符()设置插入顺序

C++ sort std::使用运算符()设置插入顺序,c++,sorting,C++,Sorting,之后我将继续这篇文章 我们的课程是: class LaneConnector { public: const Lane* getLaneFrom() const { return From; } const Lane* getLaneTo() const { return To; } private: Lane* From; Lane* To; } 和要比较的函子: struct MyLaneConector

之后我将继续这篇文章 我们的课程是:

class LaneConnector {
public:

    const Lane* getLaneFrom() const {
        return From;
    }
    const Lane* getLaneTo() const {
        return To;
    }

private:

    Lane* From;
    Lane* To;
}
和要比较的函子:

struct MyLaneConectorSorter {
  bool operator() (const LaneConnector* rhs, const LaneConnector* lhs) const
  {
    // you may want to put some null pointer checks in here
    const Lane* a = lhs->getLaneFrom();
    const Lane* b = rhs->getLaneFrom();
    return a->getLaneID() < b->getLaneID();
  }
};
struct MyLaneConectorSorter{
布尔运算符()(常数LaneConnector*rhs,常数LaneConnector*lhs)常数
{
//您可能需要在这里进行一些空指针检查
常量车道*a=lhs->getLaneFrom();
常量车道*b=rhs->getLaneFrom();
返回a->getLaneID()getLaneID();
}
};
最后是源和目标集:

const std::set<LaneConnector*> src = ..... ;

const std::set<LaneConnector*, MyLaneConectorSorter> dest(src.begin(), src.end(), MyLaneConectorSorter());
const std::set src=;
const std::set dest(src.begin()、src.end()、MyLaneConectorSorter());
dest集的大小将是1,而src有更多(在我的例子中是14)


我可能做错了什么?我珍视你的善意评论。谢谢

有一种非常简单的方法,可以在问题暴露出来之前,通过这种方法抓住问题。编写单元测试


我猜你所有的LaneConnector都是从同一条线路开始的。因此,GetLaneFrom()->GetLaneID()在所有LaneConnector上产生相同的结果

std::set
基于键跟踪元素。在比较器中,您有
返回a->getLaneID()getLaneID()。因此,
车道ID
隐式成为键。由于如果
a
b
具有相同的
LaneID
,则
MyLaneConectorSorter(a,b)
MyLaneConectorSorter(b,a)
都返回
false


因此,您的
集合
不能包含多个具有相同
LaneID的
LANECONNECTOR

LANECONNECTOR是否具有不同的车道ID?集合需要唯一的ID,如果比较器说两个键相同,我不确定集合中会发生什么。显示真实代码!如果set dest应该存储指针,那么比较器也需要获取指针!在比较函数中,你似乎有一些关于左右的混淆。你把
LaneConnector
MyLaneConnectorSorter
分别拼成两个“n”和一个“n”,这也让我很不舒服。@rahman你错了
std::set
具有唯一的条目,唯一性由比较函数确定。如果您的ID是重复的,则集合会认为元素是相同的。可能您想要的是
std::multiset
而不是
std::set
。无论如何,如果所有ID都相同,我无法理解您希望从MyLaneConnectionSorter获得什么样的订单。