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_CHAR
和 E_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/