c++ - STL映射可以与不同大小的键一起使用吗

标签 c++ stl dictionary

STL 映射可以用于不同大小的键吗?

我没有这方面的代码。我仍在尝试弄清楚是否可以做到这一点,因此我的问题。 (我是那种会在一个不可能的问题上花太多时间的人。我希望能从你的智慧中学习)。

我正在处理一个基本上有两个键的查找表。一个数字类型键和一个类型特定的辅助键。

例如一级键是一个枚举:

enum key_type {
  E_ERROR = 0,
  E_INT   = 1,
  E_CHAR  = 2,
  E_STR   = 3,
}; // Yes I know you don't HAVE to specify the values for the enumeration

然后辅助键取决于 key_type。 E_INT 的辅助键是一个整数,E_CHAR 的辅助键是一个字符,等等。

Key: E_INT
2ndary Key Examples: 1, 2, 3, 4

Key: E_CHAR
2ndary Key Examples: 'a', 'b', 'c', 'd'

Key: E_STR
2ndary Key Examples: "abc", "xyz", "pdq", "jrr"

我的第一 react 是将其设为 map 指针数组。第一级键用作数组的索引。数组索引指向支持辅助键类型的映射。

+--------+
| E_INT  |------------------------------>+------------------+
+--------+                               | MAP with INT key |
| E_CHAR |---------------\               +------------------+
+--------+                \
| E_STR  |------\          \---->+-------------------+
+--------+       \               | MAP with CHAR key |
                  \              +-------------------+
                   \
                    \------>+------------------+
                            | MAP with STR key |
                            +------------------+

知道我可以让上面的工作,但我想我可以结合这两个键并有一个单一的映射,使用自定义sort()算法处理组合键。

我是不是完全疯了?如果这不是疯了,你对如何进行有什么建议吗?

在我的脑海中,我需要为键创建一个继承类,其中基类为排序方法提供纯虚函数,然后为 E_INT 继承键类, E_CHARE_STR,为它们的使用实现了 sort() 方法。然后我会使用基键类作为 map 的键。

评论?


编辑 2010 年 8 月 13 日

我一直在尝试提出的一些解决方案,以及我最初的想法。我一直遇到问题。我确实偶然发现了另一篇提到 type erasure 的 stackoverflow 文章这可能对我的不同键有用。


编辑 2010 年 8 月 16 日

在下面的答案部分添加了一个答案,显示了我实现的编码解决方案。

最佳答案

std::map需要 strict weak ordering对于 key 。如果您可以使用自定义比较器对不同的 key 类型强制执行单一顺序,那么这应该不是问题。

关于c++ - STL映射可以与不同大小的键一起使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460880/

相关文章:

c++ - 与多组件 key 的快速部分匹配

jquery - 使用 Jquery Maphilight 插件更改单击区域的填充颜色

c++ - vs 2008 623 编译器错误

c++ - 错误 : ‘xxx’ does not name a type

c++ - QGraphicsScene 在 QGraphicsView 中奇怪地缩放

STL - STL库在复制指针时是否使用malloc?

c++ - 容器复杂度

ios - 如何阅读本地化的 plist 作为字典?

javascript - 如何在 Javascript 中实现 map,其中值是一个类似于 Java 的字符串数组?

c++ - 删除元素 BST