【发布时间】:2016-02-16 12:15:39
【问题描述】:
我正在寻找一个二维哈希映射,其中行和列索引是指针。即,我要求它们是指针,而不是无符号的连续整数作为行和列索引。
我不关心插入性能或其在内存中的大小,但我确实需要快速查找和迭代。
基本界面可能如下所示:
template<typename Key, typename Value>
class pointer_matrix
{
public:
iterator insert(Key const& row, Key const& column, Value& value);
Value& at(Key const& row, Key const& column);
row_iterator row(Key const& row);
column_iterator column(Key const& column);
};
这个界面将允许我进行两种类型的查找:
- 给定两个键,我可以识别出对应的值对象:
(Key, Key) => Value - 只需一个键,我就可以遍历多个值对象;此值对象向量表示行或列,具体取决于查找:
Key => (Value, Value, ...)
它基本上是一个“表”,其中列和行标题都是指针,而不是从 0 开始的连续整数。
在 Google 中搜索“指针矩阵”或“哈希矩阵”会找到有关简单 my_type** 矩阵的信息,这绝对是我所需要的不是。
这样的容器存在吗?如果不是:构建这样一个容器的合理工具是什么?
【问题讨论】:
-
std::map怎么样? -
在您的示例界面中,您的意思是
Key必须是“任何可散列类型”吗? (而且您知道“无符号的连续整数”包含在“可散列”要求中)您能否编辑您的问题以包括如何使用pointer_matrix的示例?或者至少包括一个用例? -
无论如何,如果你想要任何可散列的东西作为键,为什么不使用
std::unordered_map作为底层容器呢? -
您似乎在寻找二维地图。通常你只需制作一张地图,
std::unordered_map<key, std::unordered_map<key, value>>,等等,以获得地图的更多维度。然而它不是一个矩阵(例如它的行列式是什么?)所以搜索矩阵实现可能没有帮助。