用于在c ++中保留没有/带有重复项的插入顺序的数据结构

时间:2017-11-15 06:16:38

标签: c++ vector struct set stdmap

我有一个包含多个变量的结构来考虑唯一性。假设结构如下。

struct Object
{
    // uniqueness considers with following 3 variables
    int Var1;
    std::string Var2;
    std::string Var3;
    // few more variables, not important

    struct ObjectCompare
    {
        bool operator()(const Object* lhs, const Object* rhs) const {
            return std::tie(lhs->Var1, lhs->Var2, lhs->Var3) < std::tie(rhs->Var1, rhs->Var2, rhs->Var3);
        }
    };

要求:

  1. 在应用程序运行时插入指向结构的指针,因此会动态增长。
  2. 插入后插入所有元素,并按插入顺序重复。
  3. 插入后迭代所有元素,不会在插入顺序中重复。
  4. 查找项目的存在。
  5. 不能使用连锁密钥。
  6. 指针保存在数据结构中。
  7. std和boost是首选。
  8. 目前使用如下数据结构的集合,我觉得这不是最优化的。

    std::vector<Object*> vec_WithDuplicates; // preserve insertion order
    std::set<Object*, Object::ObjectCompare> set_ToFindExistence;
    
    // Inserted into vec_WithoutDuplicates if not exists in the set_ToFindExistence set.
    std::vector<Object*> vec_WithoutDuplicates; // preserve insertion order
    

    我的问题是我需要将哪些数据结构/结构集用于大多数优化和清洁的解决方案?

0 个答案:

没有答案