c++ - boost::unordered_multimap 中的等键函数:查询键是否保证是第一个 arg?

标签 c++ boost multimap

我有一个 boost::unordered_multimap< std::vector<int>, float> .我用来查询 multimap 的键可能包含额外的 0我想忽略的整数(但插入 map 中的键从不包含 0 )。

例子:

int main() {
  typedef std::vector<int> Vec;
  typedef boost::unordered_multimap<Vec, float, MyHash, MyEqualKeys> Map;
  Map map;

  Vec vec1;
  vec1.push_back(2);
  vec1.push_back(6);
  map.insert(Map::value_type(vec1, 4.3));
  map.insert(Map::value_type(vec1, 6.8));

  Vec queryVec;
  queryVec.push_back(2);
  queryVec.push_back(0); // additional 0, to be ignored                                                                                                                         
  queryVec.push_back(6);
  for (std::pair<Map::iterator, Map::iterator> iter = map.equal_range(queryVec);
       iter.first != iter.second; ++iter.first) {
    std::cout << iter.first->second << std::endl; // 4.3 and 6.8
  }
}

我写了一个散列函数MyHash忽略 0在要散列的 key 中。

我的问题是:当我写 MyEqualKeys 时, 是否保证查询键(在我的例子中可能有额外的 0 )总是第一个参数?

所以,当我写这个仿函数时:

struct MyEqualKeys {
  bool operator()(Vec const& x, Vec const& y) const {...}
};

只能x参数包含额外的 0

我想知道,因为上面我稍微简化了,实际上我可能需要检查的不仅仅是 0。并且必须检查 y 可能会有点贵也有争论(对于数百万个查询)。

最佳答案

不,没有这样的保证或要求(在任何无序关联容器上)。我建议为您的关键对象添加一个“已清理”标志。

关于c++ - boost::unordered_multimap 中的等键函数:查询键是否保证是第一个 arg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11094963/

相关文章:

c++ - 确定数组的大小

c++ - 连接未知类的成员函数以 boost 信号

c++ - 如何在 QtCreator 中将控制台模式更改为 gui 模式?

c++ - cmake 在 linux 上找不到 boost header

c++ - Boost shared_ptr 断言失败但值不为 NULL

java - Google Maps API v2 多 map fragment 问题

c++ - std::conditional 编译时分支评估

c++ - 如何遍历 multimap 并打印按键分组的值?

c++ - 创建双向本地/Unix 套接字