首页 > 电脑 > c++在map中使用结构体做key

c++在map中使用结构体做key

电脑 2022-12-09

如何在STL的map中使用结构体作为键值

这里首先给出容器map的原型: 1 2 3 4 5 6 7 8 template < class Key, class T, class Compare = less, class Alloc = alloc> class map{ ... } 可以看到模板参数一共有四个,第一个就是Key,即键;第二个就是值;第四个就是空间配置器,默认使用alloc(随STL版本不同而不同)。那么第三个是啥? 我们知道,map的底层数据结构,其实是树,更确切的说,是一个RB-tree(红黑树)。RB-tree树在进行插入时,会按照一定的规则把新元素插入特定位置。相应的,进行删除操作时,也会按一

map中的key为结构体时,怎么find?

第一个问题是关于 map 的。话不多说,以下 20 多行的 C++ 代码重现了我遇到的问题: #include #include using namespace std; struct S { int x, y; S(int xx, int yy): x(xx), y(yy) {} bool operator <(const S& s) const { return x < s.x && y < s.y; } }; map ms; int main() { ms.insert(map::value_type(S(31, 41

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

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

2、例子:

map>myMap;

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

mapchildMap2;
childMap2.insert(map::value_type("childMap2item1","item1"));

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

//若想从myMap中找到childMap1的key为"chileMap1item2"的元素,可以这么做
map>::iteratorit=myMap.find("childMap1");
map::iteratorchildIterator=it->second.find("chileMap1item2");
stringvalue=childIterator->second;//value即为所求值

关于Map使用自定义类做为 key时的问题

这个需要重写Student类的hashCode和equals方法。这两个方法是集成自超类Object的。 HashMap默认是使用hashCode对比传入的key是否一致,如果hashCode一致会用equals进行对比,如果还是一致那么认为是同一个key。 你的Student类有age和name两个成员变量,可以根据这两个变量设定hashCode和equals方法。 public int hashCode(){ return name.hashCode() + age; } public boolean equals(Object o){ return (o instanceof Stude

结构体可不可以作为map的key

但现在有个特殊要求,想将结构体作为索引,应该怎么办呢,下面写了一段测试代码来展示怎么使用。头文件中定义一个结构:typedef struct TESTSTRUCT{int i;int j;bool operatori< rhs.i);}}TESTSTRUCT;具体使用:map mapTest; TESTSTRUCT mapinde

标签:信息技术 编程 编程语言 CC++ map

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18