gpt4 book ai didi

c++ - 如何告诉 std::set 到 'refresh' 它的顺序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:09 25 4
gpt4 key购买 nike

如果集合中元素的值发生变化,排序可能不再正确。如这个小程序所示:

#include <algorithm>
#include <iostream>
#include <set>
#include <string>

struct Comp
{
bool operator()(const std::string * lhs, const std::string * rhs)
{
return *lhs < *rhs;
}
};

int main()
{
typedef std::set<std::string*, Comp> MySet;
MySet mySet;

std::string * a = new std::string("a");
mySet.insert(a);

std::string * c = new std::string("c");
mySet.insert(c);

std::string * b = new std::string("b");
mySet.insert(b);

for (MySet::iterator it = mySet.begin(); it != mySet.end(); ++it)
{
std::cout << *(*it) << std::endl;
}

// Ouput has correct order:
// a
// b
// c


*b = "z";
std::cout << std::endl;

std::string * d = new std::string("d");
mySet.insert(d);

for (MySet::iterator it = mySet.begin(); it != mySet.end(); ++it)
{
std::cout << *(*it) << std::endl;
}

// Output no longer ordered correctly:
// a
// d
// z
// c

return 0;
}

如何让集合“刷新”其内部排序?

最佳答案

这里的主题非常相似(尽管不是完全重复,因为您要存储指向具有自定义比较的可变对象的指针):

what happens when you modify an element of an std::set?

基本上,不要做您想做的事。相反,当您想要修改 set 持有指向的指针的对象时,请先移除指针,然后修改对象,然后重新插入指针。

关于c++ - 如何告诉 std::set 到 'refresh' 它的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021331/

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