【发布时间】:2021-06-03 18:47:04
【问题描述】:
我正在尝试做的事情:将set 中的元素按elem->value 排序,但仍然根据它们指向的内存地址识别它们是不同的元素。
#include <iostream>
#include <set>
using namespace std;
struct Node {
int value;
Node(int v) : value(v) {}
};
int main()
{
Node* a = new Node(10);
Node* b = new Node(10);
Node* c = new Node(20);
if (a == b) {
cout << "a == b" << endl;
}
if (a == c) {
cout << "a == c" << endl;
}
auto comparator = [](Node* lhs, Node* rhs) {
return lhs->value < rhs->value;
};
set<Node*, decltype(comparator)> s(comparator);
s.insert(a);
s.insert(b);
s.insert(c);
cout << "after inserts, s.size() = " << s.size() << endl;
s.erase(a);
cout << "after erase, s.size() = " << s.size() << endl;
delete(a);
delete(b);
delete(c);
return 0;
}
由于a != b,我期望得到:
after inserts, s.size() = 3
after erase, s.size() = 2
但相反,我得到:
after inserts, s.size() = 2
after erase, s.size() = 1
使用lhs->value <= rhs->value,我得到:
after inserts, s.size() = 3
after erase, s.size() = 3
使用multiset,我得到:
after inserts, s.size() = 3
after erase, s.size() = 1
【问题讨论】:
-
听起来像是 XY 问题。您要解决的实际问题是什么?