如何解决在集合中存储相等的对象
我想要做的是:按 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
使用 multiset
,我得到:
after inserts,s.size() = 1
解决方法
您应该使用内存地址进行决胜局。
示例:
auto comparator = [](Node* lhs,Node* rhs) {
return lhs->value < rhs->value ||
(lhs->value == rhs->value && lhs < rhs);
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。