学用STL::map成功

原创 2003年07月29日 08:15:00

目的:想通过名字对应数据来组织一组数据

分析:根据经验积累知道这样的功能C++有现成的实现(STL::map/不打算用MS的CMap - 不会:-),完全用不着自己写,可惜以前没有学过STL。

开始工作:不怕,用google搜std::map,Y的,搜中文内容就只有2-3十项,还大部分都是重复个没完,我不会用都能看见到处是错误,一个demo都找不着。还是老老实实的搜英文吧,NB,一下找到了SGI的帮助http://www.sgi.com/tech/stl/Map.html,看看就会了一点点皮毛,继续找http://p2p.wrox.com/archive/c_plus_plus_programming/2001-06/27.asp还算比较详细,可以搞定,没问题了。

先写段代码测试一翻:

用std::map<const char*, int>做测试最简单,不过发现初始化时想循环使用const char*似乎不好使,换std::map<std::string, int>来试试,KAO,用VC6就是编译不过(MS的东东如果多遵点标准就好使了),看来是MS的编译器没做好,委屈求全,换std::map<CString, int>,这回是用MS自己东东,当然不能出问题。

凑合算是搞定了,测试代码能够完全按偶的意志执行。。。有谱了

----------------------------------------测试代码---------------------------

// maptest1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <afx.h>

#include <iostream>
//#include <vector>
#include <map>
using namespace std;

class stT
{
public:
 int  _i;
 char _s[10];

public:
 stT(int i = 0)
 {
  memset(this, 0, sizeof(*this));
  _i = i;
 }
};

struct ltstr
{
 bool operator()(const char* s1, const char* s2) const
 {
  //return strcmp(s1, s2) < 0;
  return _stricmp(s1, s2) < 0;
 }
};

void _map_test2()
{
 typedef std::map<CString, stT, ltstr> TEST_MAP;
 typedef TEST_MAP::iterator TEST_IT;

 TEST_MAP mm;
 for (int i = 0; i < 10; i++)
 {
  CString sTmp;
  sTmp.Format("%02d", i);

  stT t(1 + i);
  strcpy(t._s, sTmp);
  mm[sTmp] = t;
  //mm.insert(TEST_MAP::value_type(sTmp, t));
 }
 mm.insert(TEST_MAP::value_type("Aa", stT(11)));
 mm.insert(TEST_MAP::value_type("aa", stT(12)));
 mm.insert(TEST_MAP::value_type("aA", stT(13)));

 int size = mm.size();

 TEST_IT it;
 for (it = mm.begin(); it != mm.end(); it++)
 {
  stT* pt = &it->second;
  //int t = it->second._i;
 }

 it = mm.find("06");
 if (it != mm.end())
 {
  stT* pt = &it->second;
  //int t = it->second;
 }

 it = mm.find("aa");
 if (it != mm.end())
 {
  stT* pt = &it->second;
  //int t = it->second;
 }

 it = mm.find("AA");
 if (it != mm.end())
 {
  stT* pt = &it->second;
  //int t = it->second;
 }
}

void _map_test1()
{
 typedef std::map<CString, int, ltstr> TEST_MAP;
 typedef TEST_MAP::iterator TEST_IT;

 TEST_MAP mm;
 for (int i = 0; i < 10; i++)
 {
  CString sTmp;
  sTmp.Format("%02d", i);

  int t = (1 + i);
  mm[sTmp] = t;
  //mm.insert(TEST_MAP::value_type(sTmp, t));
 }
 mm.insert(TEST_MAP::value_type("Aa", 11));
 mm.insert(TEST_MAP::value_type("aa", 12));
 mm.insert(TEST_MAP::value_type("aA", 13));

 int size = mm.size();

 TEST_IT it;
 for (it = mm.begin(); it != mm.end(); it++)
 {
  int t = it->second;
 }

 it = mm.find("06");
 if (it != mm.end())
 {
  int t = it->second;
 }

 it = mm.find("aa");
 if (it != mm.end())
 {
  int t = it->second;
 }

 it = mm.find("AA");
 if (it != mm.end())
 {
  int t = it->second;
 }
}

int main(int argc, char* argv[])
{
 _map_test2();
 _map_test1();
 return 0;
}

----------------

请熟悉STL的朋友指点如何在MSVC6下使用std::map<std::string, int>

STL中map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候...
  • IT_YUAN
  • IT_YUAN
  • 2014年03月31日 22:38
  • 31030

stl之map容器的原理及应用

容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来。map容器是一种关联容器,实现了SortedAs...
  • u010418035
  • u010418035
  • 2015年07月05日 12:21
  • 6567

《STL源码剖析》---stl_map.h阅读笔记

map是STL中的标准关系容器,它存储的元素时pair,拥有键值key和实值value。按照键值key存储到红黑树中,用红黑树提供的函数操作map。...
  • KangRoger
  • KangRoger
  • 2014年08月16日 11:46
  • 3215

带你深入理解STL之Set和Map

在上一篇博客中,讲到了STL中关于红黑树的实现,理解起来比较复杂,正所谓前人种树,后人乘凉,RBTree把树都种好了,接下来就该set和map这类关联式容器来“乘凉”了。STL的set和map都是基于...
  • terence1212
  • terence1212
  • 2016年09月09日 15:28
  • 2788

【STL】从源码看map

map 与set相同,map同样是以红黑树RB_Tree为底层机制的关联式容器。map的每一个元素都拥有两个值,一个键值(key)和一个实值(value)。它的内部实现是用一个pair来保存这个两个值...
  • LLZK_
  • LLZK_
  • 2016年11月15日 21:04
  • 1294

stl map遍历和删除的方法

for(;iter!=mapStudent.end();) {      if((iter->second)>=aa)      {          //满足删除条件,删除当前结点,并指向下...
  • u014082714
  • u014082714
  • 2015年03月15日 18:32
  • 2273

学习STL map, STL set之数据结构基础

STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构。 C++ STL 之所以得到广泛的赞誉,也被很多人使用...
  • acpchenpeng
  • acpchenpeng
  • 2016年01月25日 10:48
  • 256

stl map底层之红黑树插入步骤详解与代码实现

文章用图片的方式对红黑树插入过程的调整进行了详细解释。并给出红黑树插入调整实现的C++源码。...
  • mxway
  • mxway
  • 2014年06月08日 08:24
  • 13115

STL中的list/set/map等容器clear之后的内存占用

最近在知乎上看到一个问题
  • hekailing
  • hekailing
  • 2014年11月09日 20:05
  • 3562

STL MAP及字典树在关键字统计中的性能分析

对C++ STL map和字典树在对关键字进行统计时运行时间,内存使用进行了对比和分析。同时分析了下map和字典树的应用场合。...
  • mxway
  • mxway
  • 2014年03月16日 16:05
  • 4024
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学用STL::map成功
举报原因:
原因补充:

(最多只允许输入30个字)