我有一个boost::unordered_multimap< std::vector<int>, float>
. 我用来查询多映射的键可能包含0
我想忽略的其他整数(但插入到映射中的键从不包含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
要散列的键中的 。
我的问题是:当我写MyEqualKeys
时,是否保证查询键(在我的情况下可能有额外0
的)始终是第一个参数?
所以,当我写这个函子时:
struct MyEqualKeys {
bool operator()(Vec const& x, Vec const& y) const {...}
};
只有x
参数可以包含额外的0
吗?
我想知道,因为上面我稍微简化了,实际上我可能需要检查的不仅仅是 a 0
,而且检查参数也可能稍微昂贵y
(对于数百万个查询)。