gpt4 book ai didi

c++ - C++ 中的多映射 equal_range

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:47 26 4
gpt4 key购买 nike

cplusplus.com 网站上提供了使用 equal_range 的示例:

 int main ()
{
std::multimap<char,int> mymm;

mymm.insert(std::pair<char,int>('a',10));
mymm.insert(std::pair<char,int>('b',20));
mymm.insert(std::pair<char,int>('b',30));
mymm.insert(std::pair<char,int>('b',40));
mymm.insert(std::pair<char,int>('c',50));
mymm.insert(std::pair<char,int>('c',60));
mymm.insert(std::pair<char,int>('d',60));

std::cout << "mymm contains:\n";
for (char ch='a'; ch<='d'; ch++)
{
std::pair <std::multimap<char,int>::iterator, std::multimap<char,int>::iterator> ret;
ret = mymm.equal_range(ch);
std::cout << ch << " =>";
for (std::multimap<char,int>::iterator it=ret.first; it!=ret.second; ++it)
std::cout << ' ' << it->second;
std::cout << '\n';
}

据说输出是:

mymm contains:
a => 10
b => 20 30 40
c => 50 60
d => 60

但这不是错了吗?例如对于'd',条件it!=ret.second 会立即失败并且永远不会执行循环?还是我弄错了? (这很重要,因为我已经基于此示例编写了一些代码,但再看一看,我认为它可能行为不端。)

最佳答案

范围内的第二个迭代器是“最后一个”,就像 mymm.end() 的工作方式一样。如果 mymm.begin()mymm.end() 相同,则容器中没有任何内容。这里,ret.firstret.second 相同,意味着结果范围内没有元素。由于 'd' 有一个元素,ret.first 指向该元素并且 ret.secondmymm.end() 相同>.

关于c++ - C++ 中的多映射 equal_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com