c++ map的key可以是map吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ map的key可以是map吗相关的知识,希望对你有一定的参考价值。

1、map,顾名思义就是地图。其实就是key,value的对应的映射。
当需要快速的获取对应key的value的时候,就可以使用map了。例如一个人是有名字,但是这个人还有其他的属性,例如年龄,性别等等。这个人就会被封装为一个对象。如果有很多个人,我们需要快速的根据一个人的名字获取对应名字的对象,这个时候map就有用了。如果采用数组,我们需要遍历整个数组,才可以根据名字找到这个人。如果是map(以名字为key,以人的对象为value),就可以直接根据名字得到这个对象,就不需要遍历操作了。
C++的map是采用红黑树实现的,因此获取value的效率为lgn级别。
2、例子:
map<string,map<string,string>> myMap;

map<string,string> childMap1;
childMap1.insert("childMap1item1","item1");
childMap1["chileMap1item2"]="item2";//若没找到key为chileMap1item2的元素就则添加一个

map<string,string> childMap2;
childMap2.insert(map<sting, string>::value_type("childMap2item1","item1"));

myMap.insert("childMap1",childMap1);
myMap.insert("childMap2",childMap2);

//若想从myMap中找到childMap1的key为"chileMap1item2"的元素,可以这么做
map<string,map<string,string>>::iterator it = myMap.find("childMap1");
map<string,string>::iterator childIterator = it->second.find("chileMap1item2");
string value=childIterator->second;//value即为所求值
参考技术A

前面回答错了,贴代码,环境:Qt 

std::map< std::map<int,int> ,int > test;    for(int i = 0;i < 100; ++i)
    
        map<int,int> tt;
        for(int j = 0; j< 100; j++)
            tt.insert(j,j);
        test.insert(tt,i);
    
    for(auto it = test.begin(); it!= test.end(); ++it)
    
        qDebug() << it->second;
    
    auto it = test.begin();
    auto it2 = it->first;
    auto it3 = it2.begin();
    auto it4 = it2.end();
    for(auto ii = it3; ii != it4; ++ii)
    
        qDebug() << ii->second;
    
    
    编译过了,能正常输出,有意思。

c++ map怎样根据索引的内容查找到key

c++的std::map有两种方式可以实现依据索引的内容查找对应的键值

    使用std::map的find接口。

    例子如下:

    std::map<std::string,int> mapTest;

    std::map<std::string,int>::iterator it = mapTest.find("index");

    if(it!=mapTest.end()) return it->second;

    使用std::map的下标运算符重载

    例子如下:

    std::map<std::string,int> mapTest;

    return mapTest["index"];

注意,对于第二种方式存在安全隐患。如果对应的索引并不存在对应的键值的话,会有异常抛出。如果不捕获并处理的话可能导致程序崩溃。如果不确认索引是否存在键值,最好使用第一种方式,并添加查找失败的处理。

参考技术A map<string,int>::iterator iter=ivec.find(k);
if(iter!=ivec.end())则找到
iter->first为key
iter->second为mapped本回答被提问者采纳
参考技术B 只能遍历了吧

以上是关于c++ map的key可以是map吗的主要内容,如果未能解决你的问题,请参考以下文章

c++ map怎样根据索引的内容查找到key

怎么在 c++ 的 map 里面 放 key-map键值对

map的key可以重复吗

java map的key可以重复吗

java map key可以重复吗

map的key可以为null吗