gpt4 book ai didi

c++ - 是否可以更改 C++ std::set 的比较器?

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

我有一组数据,在某些情况下我需要以一种方式对它们进行排序,而在某些情况下我需要以另一种方式对它们进行排序。例如,假设数据集是一组字符串,{"abc", "dfg",...}。有时我需要按字母顺序对它们进行排序,有时需要比较它们的长度。

最初我使用 std::set 作为我的数据容器并实现了 2 个比较器,希望我可以动态更改集合的比较器,因为数据很大并且从中复制它不是一个好主意一组到另一组..我只是想不时使用不同的比较器对其进行排序。这是可能的还是正确的方法?

最佳答案

你必须在构造时指定std::set的比较器。

作为一种解决方案,我会维护两个“索引”集,每个索引集都引用实际的集合。这将产生最大的灵 active 。为了将所有内容放在一起,我建议您将其包装在一个类中:

// to be compiled, debugged etc..., but ideal
// to grab the idea
// caveats: maintain the index objects whenever the collection
// gets resized/reallocated etc...
// so not to be written yourself, use an existing library :)
template< typename T, typename comp1, typename comp2 >
struct MultiIndex {
std::deque<T> collection;
std::set<T*, comp1> index1;
std::set<T*, comp2> index2;

void insert( const T& t ){
collection.push_back(t);
index1.insert( &collection.back() );
index2.insert( &collection.back() );
}
};

Boost库有这样一个类:Multiindex .

关于c++ - 是否可以更改 C++ std::set 的比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777827/

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