首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在没有for循环的情况下,如何直接找到两个迭代器之间指向两个不同键的元素的数量?

在没有for循环的情况下,如何直接找到两个迭代器之间指向两个不同键的元素的数量?
EN

Stack Overflow用户
提问于 2012-01-12 02:53:02
回答 2查看 90关注 0票数 0

在没有for循环的情况下,如何直接找到两个迭代器之间指向两个不同键的元素的数量?

代码语言:javascript
运行
复制
     #include <string>
     #include <iostream>
     #include <map>
     #include <utility>
     #include <iterator>
     #include <stdio.h>
     using namespace std;
     int main()
   {

     std::map<string, string> m;
     m.insert(pair< string, string>("4-2"," 61-7" ));
     m.insert(pair< string, string>("5-2"," 61-7" ));
     m.insert(pair< string, string>("5-3"," 61-7" ));
     m.insert(pair< string, string>("5-4"," 61-7" ));
     m.insert(pair< string, string>("5-5"," 61-7" ));
     m.insert(pair< string, string>("5-6"," 61-7" ));

     map<string, string>::iterator it4;
     map<string, string>::iterator it5;
     it4=m.find("5-2");
     it5=m.find("5-5");
     cout << " value of it4" << it4->first << it4->second <<  endl;
     cout << " value of it5" << it5->first << it5->second <<  endl;
     m.clear();
     getchar();

  }

我想要的输出是it5和it4之间的元素差异,这里是2,因为它们之间有关键字"5-3“和"5-4”。我不想在for循环中迭代,因为在我的例子中,map中的元素数量足够大了。而且我必须经常知道它们之间的区别。如果两个迭代器相距很远,则使用for循环将花费大量时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-12 02:58:18

您可以从<iterator>使用std::distance(it4, it5)。然而,成本在结果中将是线性的,因此这并不能真正节省您的成本。如果您必须快速访问此信息,请考虑使用Boost.Multi_index容器,以便可以将随机访问索引添加到地图中。

票数 5
EN

Stack Overflow用户

发布于 2012-01-12 03:08:25

考虑到你的需求,这是不可能的。std::map不提供随机访问迭代器,这是在恒定时间内确定迭代器距离所必需的。

您仍然可以使用std::distance,但成本将与您自己编写循环的成本相同。

如果您需要更有效地生成此信息,则必须用不同的数据结构替换地图(或者至少通过一些额外的记账来增强它)。

唯一具有随机访问迭代器的标准库容器是vectordeque和` `array。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8824974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档