C++ C+中的数据结构+;用于维护插入顺序并消除重复项

C++ C+中的数据结构+;用于维护插入顺序并消除重复项,c++,C++,我需要维护用户输入数据的顺序,但需要消除重复项。我查看了地图,它消除了重复项,但不可能维持用户输入的顺序。set也有同样的问题。stl中是否有任何数据结构可以同时满足这两个要求?我无法在此项目上使用boost。维护地图和列表。对于每个元素,在添加到列表之前搜索映射。如果未找到,请附加到列表并插入到映射中,否则继续 问题是,如果您保持搜索顺序,那么搜索重复项的成本很高,因此您不会找到同时执行这两项任务的数据结构。C++11引入了std::unordered_set,这可能就是您想要的 如果不使用C

我需要维护用户输入数据的顺序,但需要消除重复项。我查看了地图,它消除了重复项,但不可能维持用户输入的顺序。set也有同样的问题。stl中是否有任何数据结构可以同时满足这两个要求?我无法在此项目上使用boost。

维护地图和列表。对于每个元素,在添加到列表之前搜索映射。如果未找到,请附加到列表并插入到映射中,否则继续

问题是,如果您保持搜索顺序,那么搜索重复项的成本很高,因此您不会找到同时执行这两项任务的数据结构。C++11引入了
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?可能重复