【问题标题】:Map with multiple keys in C++在 C++ 中使用多个键映射
【发布时间】:2013-04-06 17:43:06
【问题描述】:

我想通过它们的名称和索引来存储数据。换句话说,我想将string 名称映射到对象并给它们一个自定义顺序。

我首先想到的是 std::vector 一对 string 键和对象。顺序由向量中的位置给出。

std::vector<std::pair<std::string, object> >

但这种方法似乎不是最理想的,因为它不会自动检查 string 名称的唯一性。此外,首先按顺序对对象进行分组感觉不对,因为从逻辑上讲,它们的第一顺序区别就是名称。

我需要一个允许通过名称和索引访问的数据结构。

std::magic<std::string, unsigned int, object> collection;

// access by either string or unsigned int key
collection.insert("name", 42, new object());
collection["name"]
collection[42]

是否已经有此用例的数据结构?如果没有,我怎样才能把它们放在一起,最好使用标准库?另外我想要一种在给定元素之后的位置插入新元素而不移动所有其他元素的方法。

【问题讨论】:

  • 你需要两个 std::map 对象。
  • @n.m.我不需要按字符串名称排序。所以基本上我需要一个std::vector 用于订单和std::unordered_map 用于名称。但我的问题是,是否已经有解决方案或至少有更好的方法。
  • unordered_map 如果您使用的是 C++11,则有可能。对于索引,vectormap/unordered_map 之间的选择取决于从集合中删除内容时应该发生的情况。如果你不关心稳定的索引,你可以使用vector。我认为两个容器更可取的方式。
  • boost::multiindex,就是为了这个目的。

标签: c++ key std stdmap compound-key


【解决方案1】:

Boost 专门为此目的提供了一组容器,请参阅:boost::multiindex

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2012-01-08
    • 2011-03-17
    相关资源
    最近更新 更多