如何更改运算符<让我的逻辑工作?
我是这样尝试的,但它没有用。
struct simpleLink {
int orig;
int dest;
bool operator<(const simpleLink& otherLink) const
{
if(orig == otherLink.orig)
return dest < otherLink.dest;
else if (orig == otherLink.dest)
return dest < otherLink.orig;
else
return orig < otherLink.orig;
}
}
从我的观点来看,它应该有效,但它不是......
当我有一组simpleLink并且我插入(0,1)然后我尝试插入(1,0)时,它不应该插入
示例:
int main() {
set<simpleLink> test;
simpleLink secureLink;
secureLink.orig = 0;
secureLink.dest = 1;
simpleLink secureLink2;
secureLink2.orig = 1;
secureLink2.dest = 0;
cout << secureLink.orig << " " << secureLink.dest << endl;
cout << secureLink2.orig << " " << secureLink2.dest << endl;
test.insert(secureLink);
test.insert(secureLink2);
cout << "Test Size:" << test.size() << endl;
return 0;
}
输出是:
0 1
1 0
Test Size: 2
集合的大小应为1。
答案 0 :(得分:0)
如果您希望集合中的两个项目比较等效,则比较器必须为(a,b)或(b,a)生成等价。你的功能没有这样做。
看起来你想忽略任何两个比较相等且基于不平等的排序?
为此,您必须选择如何相对于彼此订购所有orig和dest!
以下工作方法是为每个链接排序orig和dest,然后比较最小的链接。只有当最小值相等时我们才会比较较大的。
import fileinput
for line in fileinput.input():
print line
示例:
希望这有帮助。