std::set<T>
容器如何检查两个对象是否唯一?我尝试重载等号运算符(==),但没有成功。我想这样做的原因是,假设我有一个类Person,并且我指定如果他们有相同的姓名(甚至出生日期、地址等),则我的Person是同一个人。在 ccpreference.com 中,他们写道(对我来说有点不清楚):在标准库使用比较概念时,“唯一性”通过使用等价关系来确定。简单地说,如果没有一个对象小于另一个对象,则认为两个对象a和b是等价的(不唯一):!comp(a, b) && !comp(b, a)。我认为,这个问题也扩展到其他STL容器,甚至算法(甚至整个STL)。所以,如果将来我想使用函数std::find,我会查找该人的姓名而不是对象本身。这正确吗?
编辑
我想添加一些示例代码。
// My operator overloading comparing two strings.
bool operator==(Node & rhs) const {
return this->name.compare(rhs.name);
}
然后,在 UnitTest 中,我将具有相同名称的对象两次添加到集合中。它被添加了两次(但根据 operator==
应该是相同的)。
void test_adding_two_identical_nodes() {
// The pool is a set<Node> inside
model::Node_Pool pool{};
pool.store_node(model::Node{"Peter"});
pool.store_node(model::Node{"Peter"});
// Should be only 1 because the same node should be added once into a set.
ASSERT_EQUAL(1, pool.size());
}