我很想使用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的替换,用于维护插入顺序。