【发布时间】:2015-05-21 02:12:58
【问题描述】:
我有一组 3 个整数的元组,我不想要任何重复项。也就是说,我不希望 2 个条目具有相同的 3 个值。
这是我的代码。
struct Key{
unsigned a;
unsigned b;
unsigned c;
public:
Key(unsigned _a, unsigned _b, unsigned _c) :
a(_a),
b(_b),
c(_c) {}
bool operator<(const Key& rhs) const
{
if (a < rhs.a) {
return true;
}
if (b < rhs.b) {
return true;
}
if (c < rhs.c) {
return true;
}
return false;
};
};
std::set<Key> myset;
但我有时会在myset 中看到重复项。我无法准确掌握导致添加重复条目的顺序。它并不总是发生。
我的问题是,我的 operator< 函数是否存在本质问题?
【问题讨论】:
-
你能发布一些重复的值吗?
-
很好地为这个问题提出了正确的初始问题——通常是一个损坏的严格弱排序确实会导致这种情况。如果您以奇怪的方式使用该套装,您可能在其他地方也有 UB。
-
我试图简化我的问题。我测试的集合实际上具有元组的第一个元素,类型为“boost::asio::ip::address_v4”。鉴于我在集合中看到两次 (172.20.20.10, 4077, 17) 条目。