gpt4 book ai didi

c++ - std::multiset 和上限和下限的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 13:17:25 26 4
gpt4 key购买 nike

我正在寻找计算 std::multiset 中元素的不同出现次数的代码。我有以下代码

#include <set>
#include <iostream>
#include <thread>
#include <chrono>

struct test
{
std::pair<std::string,std::string> p;
std::pair<unsigned short, unsigned short> s;
unsigned short c;
};

bool operator<(test const & l, test const & r)
{
return (l.p < r.p || l.s < r.s);
}

int main(int argc, char ** argv)
{
test a = { {"p0","q0"} , {2,4} , 13 };
test b = { {"p0","q0"} , {2,4} , 26 };
test c = { {"p0","q0"} , {2,4} , 14 };
test d = { {"p0","q0"} , {3,5} , 23 };
//test e = { {"p0","q0"} , {3,5} , 22 };
test f = { {"p1","q0"} , {2,4} , 13 };

std::multiset<test> set;
set.insert(a);
set.insert(b);
set.insert(c);
set.insert(d);
//set.insert(e);
set.insert(f);

for(auto i=set.begin(); i!=set.end(); i=set.upper_bound(*i))
{
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << set.count(*i) << std::endl;
}
}

上面的 for 循环永远不会停止,我不知道为什么。输出是

3
1
1
1
1
... with endless output of "1"

如果我从上面的代码中删除注释(放入“e”),我会得到类似的输出

3
0
2

在这种情况下,for 循环结束了,我也无法理解。

最佳答案

上面的评论让我找到了解决方案。接线员错了。这是更正后的:

bool operator<(test const & l, test const & r)
{
if (l.p < r.p)
{
return true;
}
if (l.p == r.p && l.s < r.s)
{
return true;
}
return false;
}

关于c++ - std::multiset 和上限和下限的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com