私は持っていboost::unordered_multimap< std::vector<int>, float>
ます。マルチマップのクエリに使用するキーには0
、無視したい追加の int が含まれている場合があります (ただし、マップに挿入されたキーには決して含まれません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