c++/STL/map中怎样获取map中第i个元素

Map的iterator貌似不可以直接加减
除了线性遍历以外没有别的方法吗?线性遍历一定会TLE

比如
map<int,int> m;
m[3]=2;m[6]=7;m[9]=3;m[100]=9;

想要m的第3个元素,返回上述中的3;

另外,得到某个迭代器,那么怎么知道它是第几个元素?
比如同上述里,通过first=100返回4

1、在对应的JavaScript文件中,定义一个Map数据结构变量m,并分别打印值和类型,如下图所示。

2、保存代码并运行,结果发现Map {}以及对象类型(Map是一种对象),如下图所示。

3、接着调用Map数据结构中的set方法,添加5个元素,其中有一个的key值重复了,如下图所示。

4、保存代码并运行,查看控制台打印结果,发现key-value值,如下图所示。

5、使用get()方法获取单个元素,传入的参数是key值。

6、最后保存代码并运行,可以查看到Map数据结构中的value值。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-03
map将key和value组成的pair作为元素,根据key的排序准则自动将元素排序,map中的存取封装了二叉树,因此map按照自己的算法来进行存取,跟你给元素赋值的顺序无关,无论哪一个先赋值最终的map中数据排列属性都是:m[3]=2;m[6]=7;m[9]=3;m[100]=9; 即按照key的大小进行了排序。m[3]=2;m[6]=7;m[9]=3;m[100]=9情况你说的第三个是m[9]=3,如果m[9]=3;m[100]=9;m[3]=2;m[6]=7;你所谓的第三个元素是不是就是:m[3]=2? 这种情况插入到map后map第三个数据依然是m[3]=3.
map就是为了按照key来进行key-value的查看,可以考虑使用list 将键值对做到一个list中,list是顺序存取的,你取的顺序根据有的存顺序决定。本回答被提问者和网友采纳
第2个回答  推荐于2017-09-19
#include<map>
#include<string>
#include<iostream>

int main()
{
map<string,int> words;
map<string,int>::iterator it=words.begin();
for(;it!=words.end();++it)
cout<<"key:"<<it->first
<<"value:"<<it->second<<end1;
return 0;
}Top
第3个回答  2011-11-23
map内部是用红黑树实现的,既然是树,怎么说是“第3个元素”呢?

C++中map的用法总结
首先,定义一个map实例:map maps; \/\/键的类型是字符,值的类型是整数通过键进行元素的插入和访问是map的主要操作。例如,要将键为'c'的值设置为5,可以这样操作:maps['c'] = 5;要获取特定键对应的值,map提供了迭代器,如it->first获取键,it->second获取对应的值。另外,map的find函数是其...

c++ 输出map每个元素的值
multimap<string,int>m_map;strings("中国"),s1("美国");m_map.insert(make_pair(s,50));m_map.insert(make_pair(s,55));m_map.insert(make_pair(s,60));m_map.insert(make_pair(s1,30));m_map.insert(make_pair(s1,20));m_map.insert(make_pair(s1,10));\/\/方式1 intk;mul...

C++ map 使用方法及示例
C++ map 使用方法及示例C++ STL中的map是一种关联容器,用于存储排序的键值对,其中键是唯一的,支持插入和删除操作,但键值对的值可以修改。它以员工ID为键,姓名为值的场景为例,我们可以这样描述:语法和示例创建map时,需要指定键(key)和值(value)的数据类型,以及可选的比较类(compare,如默...

C++中map的基本使用
要使用map需要 #include <map> 并加上 using namespace std;运行结果如下:总结:输出的结果不变。因此,map中元素的插入顺序,与map的遍历顺序\/map内部元素的排序没有任何关系。之所以会这样,本质上是因为map是用红黑树实现的,红黑树是一种高效的自平衡的二叉树,其会通过旋转和变色来保证平衡,...

STL 中怎样遍历一个map中的所有元素 [转载]
map<key,value::iterator enditer = mymap.end();for(;begiter!=enditer;++begiter){\/\/ ...} 尽管map的底层一般由红黑树实现,但map的迭代器还是使它具有了一个类似线性结构的访问接口。因此,所有适用于list等顺序容器的访问方法都可以用来对map进行访问。诸如for_each(),accumulate()等遍历区间...

C++——map详解
引入:需包含头文件<map>。命名空间:使用std命名空间。创建与初始化:定义map对象并初始化。插入元素:使用插入操作。注意:value_type代表pair类型,K为键类型,V为关联值类型。规则:map中同一键仅对应一元素。重复插入相同键将被忽略。常用函数:包含查找、删除、迭代等。总结:全面解析C++中map的使用...

C++中stl容器map的方法find针对结构体
return a.data <= data ; 实际是比较两个地址,而这个应该仅跟你变量定义顺序有关。跟内容无关 改成如下即可:return !strcmp(a.data, data);

STL-map和set
STL-map和set是C++标准库中的两种容器,它们分别用于存储键值对和无重复元素的集合。Map结构以键值对形式存储数据,其中键是唯一的,值可以重复。定义map容器时需要指定键和值的数据类型,例如:`map myMap;`表示创建一个以整数为键、字符串为值的map。使用时通过键查找对应的值,插入数据使用`insert()...

关于c++中map的排序问题
STL各个容器的使用都是有其应用场景的,MAP的特点就是key值唯一,且默认排序。如果你认为value是你希望的排序原则,那么是否要考虑value作为key?另外,是否拟的程序定要用map?可以把你想解决的问题说出来,帮你参谋参谋:)

STL 容器---关联容器--map<Key,Value>
map< string, A* > stoaMap;map map;map,string> mp;请不要奇怪 实例化 构造和赋值 STL map 和 multimap 都是模板类,要使用其成员函数,必须先实例化。要实例化一个std::map对象,你需要提供两个模板参数:键的类型和值的类型。map > mapObj;multimap > mmapObj;第三个模板参数是可选的...

相似回答