使用std::set并保留输入顺序



我很想使用std::set来存储必须唯一的整数,但我不希望对它们进行排序(例如,我需要保留集合的输入顺序(

例如:

set<int> exampleSet;
exampleSet.insert(5);
exampleSet.insert(2);
exampleSet.insert(10);
exampleSet.insert(0);

该集合现在将包含

{0,2,5,10}

我希望它是原来的订单,所以

{5,2,10,0}

我该如何做到这一点?

可能最简单、最明显的方法是将集合与向量结合使用:

// We'll use this solely to keep track of whether we've already seen a number
std::set<int> seen;
// and this to store numbers that weren't repeats in order
std::vector<int> result;
// some inputs to work with
std::vector<int> inputs{ 1, 10, 1, 19, 10, 5, 2, 1, 19, 5, 1};
for (int i : inputs)
if (seen.insert(i).second) // check if it's a duplicate
result.push_back(i);   // if not, save it
// show the results:
std::copy(result.begin(), result.end(), std::ostream_iterator<int>(std::cout, "t"));

结果:

1   10  19  5   2

如果您可能有很多唯一的数字,那么std::unordered_set可能比std::set具有更好的性能。

您需要一个有序集——您可以在这里找到一个。这或多或少是一个";"下降";std::set的替换,用于维护插入顺序。

相关内容

  • 没有找到相关文章

最新更新