gpt4 book ai didi

c++ - 使用 operator() 对 std::set 进行排序以对插入进行排序

转载 作者:行者123 更新时间:2023-11-28 07:56:35 27 4
gpt4 key购买 nike

我将在 This 之后继续这篇文章 我们有一个类:

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();
}
};

最后是源和目标集:

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

const std::set<LaneConnector*, MyLaneConectorSorter> dest(src.begin(), src.end(), MyLaneConectorSorter());

目标集的大小将为 1,而源集有更多(在我的例子中为 14)

我可能做错了什么?我很重视你的评论。谢谢

最佳答案

std::set根据 跟踪元素。在你的比较器中你有return a->getLaneID() < b->getLaneID(); .因此 Lane ID隐式成为。因为如果ab有相同的LaneID , 然后都是 MyLaneConectorSorter(a, b) MyLaneConectorSorter(b, a)正在返回 false .

你的 set因此不能包含多个 LaneConnectior与相同LaneID .

关于c++ - 使用 operator() 对 std::set 进行排序以对插入进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12577571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com