我有一张带有键的地图作为结构。 Struct(key)包含两个字符串x和y。
两个键可以具有相同的x值,但它们肯定会因y而不同。
我很想使用这两个键来最好地搜索价值。
答案 0 :(得分:0)
map只应包含每个键值一次。这就是为什么它可以提供运算符[]
来唯一地寻址一个特定的密钥。
如果您为同一个键设置了多个值,则应使用multimaps代替。使用多地图时,您必须使用find()
来访问这些值。
您可以尝试这个小而非常基本的例子:
std::map<char, int> mymap; // unique key
std::multimap<char, int> mymulti; // non-unique key
mymap.insert(std::pair<char, int>('a', 10));
mymap.insert(std::pair<char, int>('b', 15));
mymap.insert(std::pair<char, int>('b', 20)); // problem: will not be inserted !
mymulti.insert(std::pair<char, int>('a', 10));
mymulti.insert(std::pair<char, int>('b', 15));
mymulti.insert(std::pair<char, int>('b', 20)); // no problem
mymulti.insert(std::pair<char, int>('c', 25));
std::cout << "First:\n"; // b is there only once
for (auto x : mymap) std::cout << x.first << ":" << x.second << "\n";
std::cout << "\nSecond:\n"; // b is ther twice
for (auto x : mymulti) std::cout << x.first << ":" << x.second << "\n";
std::cout << "first[b]=" << mymap['b'] << std::endl; // map access (direct)
std::cout << "Second[b]={"; // multimap access (iterator)
for (auto x = mymulti.find('b'); x != mymulti.end() && x->first == 'b'; x++) std::cout << x->second << " ";
std::cout << "}\n";
地图和多地图通常都是作为二叉搜索树实现的。因此它对搜索有效。