C++ C+中的数据结构+;用于维护插入顺序并消除重复项
我需要维护用户输入数据的顺序,但需要消除重复项。我查看了地图,它消除了重复项,但不可能维持用户输入的顺序。set也有同样的问题。stl中是否有任何数据结构可以同时满足这两个要求?我无法在此项目上使用boost。维护地图和列表。对于每个元素,在添加到列表之前搜索映射。如果未找到,请附加到列表并插入到映射中,否则继续 问题是,如果您保持搜索顺序,那么搜索重复项的成本很高,因此您不会找到同时执行这两项任务的数据结构。C++11引入了C++ C+中的数据结构+;用于维护插入顺序并消除重复项,c++,C++,我需要维护用户输入数据的顺序,但需要消除重复项。我查看了地图,它消除了重复项,但不可能维持用户输入的顺序。set也有同样的问题。stl中是否有任何数据结构可以同时满足这两个要求?我无法在此项目上使用boost。维护地图和列表。对于每个元素,在添加到列表之前搜索映射。如果未找到,请附加到列表并插入到映射中,否则继续 问题是,如果您保持搜索顺序,那么搜索重复项的成本很高,因此您不会找到同时执行这两项任务的数据结构。C++11引入了std::unordered_set,这可能就是您想要的 如果不使用C
std::unordered_set
,这可能就是您想要的
如果不使用C++11,则可以将一些标准容器封装在一个类中。我建议您将项目放入集合
或映射
,然后将迭代器存储到向量
\include>中
#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
std::矢量数据;
std::无序_集唯一集合;
对于(int i=0;i<50;++i)
{
int newData=rand()%27;
你能不能给我举个例子,我可以指定一个自定义比较器来指定我的类的实例何时应该相等?这取决于你所说的“相等”是什么意思。如果顺序不重要,那么比较映射
(或集
)。如果顺序重要,比较列表
(或向量
)@Jimm只需为==,,提供您自己的运算符重载。我要说的是无序的集合和向量,而不是映射和列表。集合和向量是什么意思?集合是有序的。@texasbruce:集合和映射一样,它不保持插入顺序。有多少个元素?10s?1000s?1000000?10000000?可能重复