使用STL map 用 string 做索引 插入删除数据

1、代码

 1 #include <map>
 2 #include <string>
 3 #include <stdio.h>
 4 #include <vector>
 5 #include <stdlib.h>
 6
 7 using namespace std;
 8
 9 class A
10 {
11     public:
12         int m_iX;
13
14     public :
15         A();
16         A(int i);
17         ~A();
18 };
19
20 A::A()
21 {
22 }
23
24 A::A(int i)
25 {
26     m_iX = i;
27 }
28
29 A::~A()
30 {
31 }
32
33 typedef map<string, A *> MapA;
34
35 void dumpMap(MapA & xMapA)
36 {
37     for(MapA::iterator pA = xMapA.begin(); pA != xMapA.end(); pA++)
38     {
39         printf("index : %s , value : %3d\n", pA->first.c_str(), pA->second->m_iX);
40     }
41     printf("-----------------------------------\n");
42 }
43
44 int testOne()
45 {
46     printf("%s %d %s()\n", __FILE__, __LINE__, __func__);
47
48     MapA xMapA;
49
50     for(int i = 0; i < 20; i++)
51     {
52         A * a = new A(i);
53         char szIndex[32] = {0};
54         snprintf(szIndex, sizeof(szIndex), "%03d", i);
55         string strIndex = szIndex;
56         xMapA.insert(make_pair(strIndex, a));
57     }
58     dumpMap(xMapA);
59     printf("map size : %d\n", xMapA.size());
60     for(int i = 0; i < 20; i+=2)
61     {
62         A * a = new A(i);
63         char szIndex[32] = {0};
64         snprintf(szIndex, sizeof(szIndex), "%03d", i);
65         string strIndex = szIndex;
66         MapA::iterator ppA = xMapA.find(strIndex);
67         if(ppA == xMapA.end())
68         {
69             printf("can not find : [%s]\n", strIndex.c_str());
70             continue;
71         }
72         xMapA.erase(ppA);
73     }
74     dumpMap(xMapA);
75
76     printf("map size : %d\n", xMapA.size());
77
78     return 0;
79 }
80
81 int main(int argc, char * argv[])
82 {
83     testOne();
84     return 0;
85 }

2、执行结果

./test-map 1
test-map.cpp 46 testOne()
index : 000 , value :   0
index : 001 , value :   1
index : 002 , value :   2
index : 003 , value :   3
index : 004 , value :   4
index : 005 , value :   5
index : 006 , value :   6
index : 007 , value :   7
index : 008 , value :   8
index : 009 , value :   9
index : 010 , value :  10
index : 011 , value :  11
index : 012 , value :  12
index : 013 , value :  13
index : 014 , value :  14
index : 015 , value :  15
index : 016 , value :  16
index : 017 , value :  17
index : 018 , value :  18
index : 019 , value :  19
-----------------------------------
hash size : 20
index : 001 , value :   1
index : 003 , value :   3
index : 005 , value :   5
index : 007 , value :   7
index : 009 , value :   9
index : 011 , value :  11
index : 013 , value :  13
index : 015 , value :  15
index : 017 , value :  17
index : 019 , value :  19
-----------------------------------
hash size : 10
over
时间: 2024-08-10 23:22:04

使用STL map 用 string 做索引 插入删除数据的相关文章

为什么查询出来的数据保存到Arraylist?插入删除数据为啥用LinkedList?

引言:这是我在回答集合体系时,被问到的一个问题,也是因为没有深入学习所以回答的并不是很好,所以这两天看了一下,以下是我的一些回答与学习方法. 学习方法:我们学习,系统性的学习肯定是比零散的学习更有效的,针对一个问题,要对它涵盖的内容都进行学习,而不是只针对问题本事,死记硬背,所以我也是从头学起,从最顶级的接口到实现类的源码. 今天我主要讲是针对Arraylist以及LinkedList的区别进行回答,如果你想从头来一遍,这是我学习的文章.https://www.cnblogs.com/Carpe

(转)STL map与Boost unordered_map

转:http://blog.csdn.net/orzlzro/article/details/7099231 今天看到 boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中.所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的.顺序就是按照operator< 定义的大小排序. 而boost::unordered_map是计算元素的Hash值,根据Ha

支持泛型AVL Tree的简单实现,并和STL map比较了插入,删除,查找的性能

1.问题描述: 1)AVL tree是一种自平衡树.它通过左右子树的高度差来控制树的平衡,当高度差是不大于1的时候,认为树是平衡的.树的平衡保证了树在极端情况下 (输入序列不够随机)的性能.很显然当左右子树高度平衡,保证了任何插入,删除,查找操作平均性能呢个,当不平衡时(有的子树很高),当 要操作的元素在这个子树时,性能会很差: 2)AVL tree 和Red black tree 都是一种平衡树,它的操作的时间复杂度是:O(lgN) ,N是树的节点的数目: 3)本文实现了AVL Tree, 并

泛型的RedBlack Tree的实现,并和STL map 做了简单的性能比较

问题提出: 1.RedBlack Tree是一种简单的自平衡树.它通过属性约束来实现树的平衡,保证在树上没有一条路是别的路的2倍长. 2. 它有以下五条属性约束: 1) 每个node是红色或者黑色: 2) 每个叶子node是黑色: 3)根node是黑色: 4)若一个node是黑色,则它的两个孩子node是红色: 5)   对每个node,若有从这个node到它的子孙叶子(node)的路上包含有相同数目的黑色节点: 3. 本文的实现是参考introduction to algorithm 书中的讲

STL map详细用法和make_pair函数

今天练习华为上机测试题,遇到了map的用法,看来博客http://blog.csdn.net/sprintfwater/article/details/8765034:感觉很详细,博主的其他内容也值得学习:后面附上今天的练习题目. 首先make_pair Pairs C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象 class pair可以将两个值视为一个单元.容器类别map和multimap就是使用pairs来管理其健值/实值(key/va lue)的成对元素. pai

STL——map

看到map这里,都不知道它主要是干嘛的,你有没有这样的疑问. map的主要作用:提供对T类型的数据进行快速和高效的检索 .C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree).RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构.   注:map是自动按key值排序的,默认为升序或字典排序 (1)map的定义: map对象是模板类,需要关键字和

C++ STL map详解

一.解释: p { margin-bottom: 0.25cm; direction: ltr; color: #00000a; line-height: 120%; text-align: justify; orphans: 0; widows: 0 } p.western { font-family: "Calibri", serif; font-size: 10pt } p.cjk { font-family: ; font-size: 10pt } p.ctl { font-f

(转载)STL map与Boost unordered_map的比较

原链接:传送门 今天看到 boost::unordered_map,它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中.所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的.顺序就是按照operator< 定义的大小排序.而boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同.所以,对unordered_map进行遍历,结果是无序的. 用法的区别就是

STL map常用操作简介

1.目录 map简介 map的功能 使用map 在map中插入元素 查找并获取map中的元素 从map中删除元素 2.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 3.map的功能 自动建立Key - value的对应.key 和 value可以是任意你需要的类型. 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,0