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

时间:2013-07-11 00:09:57

标签: c++

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

3 个答案:

答案 0 :(得分:2)

问题在于,如果维护搜索顺序,搜索重复项会很昂贵,因此您不会发现同时执行这两种操作的数据结构。 C ++ 11引入了std::unordered_set,这可能是你想要的。

如果您不使用C ++ 11,则可以在类中封装一些标准容器。我建议您将项目弹出到setmap,然后将迭代器存储到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/

http://www.cplusplus.com/reference/vector/