我需要维护用户输入数据的顺序,但需要消除重复项。我查看了地图,它消除了重复,但是无法维持用户输入的顺序。与set相同的问题。在stl中是否有任何数据结构可以满足这两个要求?我不能在这个项目上使用boost。
答案 0 :(得分:2)
问题在于,如果维护搜索顺序,搜索重复项会很昂贵,因此您不会发现同时执行这两种操作的数据结构。 C ++ 11引入了std::unordered_set
,这可能是你想要的。
如果您不使用C ++ 11,则可以在类中封装一些标准容器。我建议您将项目弹出到set
或map
,然后将迭代器存储到vector
中的项目中。
答案 1 :(得分:1)
维护地图和清单。对于每个元素,在追加到列表之前搜索地图。如果未找到,请附加到列表并插入到地图中,否则继续。
答案 2 :(得分:0)
#include <cstdlib>
#include <iostream>
#include <random>
#include <vector>
#include <unordered_set>
using namespace std;
int main(int argc, char *argv[])
{
std::vector<int> data;
std::unordered_set<int> uniqueCollection;
for(int i = 0; i < 50; ++i)
{
int newData = rand() % 27;
cout << "trying to insert: " << newData << endl;
if(uniqueCollection.find(newData) == uniqueCollection.end())
{
cout << " inserting item: " << newData << endl;
data.push_back(newData);
uniqueCollection.insert(newData);
}
else
{
cout << " element already exists: " << newData << endl;
}
}
return 0;
}
http://www.cplusplus.com/reference/unordered_set/unordered_set/