我有一个 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/