澳门正规赌博十大网站-澳门游戏网站
做最好的网站

区别与用法比较,中map容器的使用说明

C 中map容器的使用说明

C 中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值.

一.map的说明

 

1.头文件

#include

 

2.定义方法

(1)map m;

(2)typedef map M;

M m;

 

3.插入数据

(1)m['a'] = 1

(2)m.insert(map::value_type(b,2));

(3)m.insert(pair(c,3));

(4)m.insert(make_pair(d,4));

 

4.查找数据和修改数据

(1)int i = m[a];

m[a] = i;

(2)m::iterator m_iter;

m.find(b);

int j = m_iter->second;

m_区别与用法比较,中map容器的使用说明。iter->second = j;

!区别与用法比较,中map容器的使用说明。!!注意!!! 键本身是不能被修改的,除非删除.

 

5.删除数据

(1)m.erase(m_iter);

(2)m.erase(c);

区别与用法比较,中map容器的使用说明。!!!注意!!! 第一种情况在迭代期间是不能被删除的

 

6 迭代数据
区别与用法比较,中map容器的使用说明。for (m_iter=m.begin(); m_iter!=m.end(); m_iter)

{

 

}

7 其它方法
m.size() 返回元素数目
m.empty() 判断是否为空
m.clear() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等

 

二map的举例

 

要求: 将mymap中itemstruct的a大于100的项删除  
struct itemstruct 
{ 
     int a; 
     char b[20]; 
}; 
map mymap;

 

 

代码1:

#include  
#include  
#include 
using namespace std; 

typedef struct itemstruct 
{ 
    int a; 
    char b[20]; 
}itemS; 

itemS s[4] = {{102,what}, 
             {33,   hello}, 
             {198,world}, 
             {45,   c  } 
             };; 

int main() 
{ 
    map  mymap; 
    string str[4] = {1st,2nd,3rd,4th}; 
    for(int i = 0; i<4; i  ) 
    { 
        mymap.insert(make_pair(str[i], s[i])); 
    } 

    map::iterator it; 
    for(it=mymap.begin(); it!=mymap.end(); it  ) 
    { 
        if(it->second.a >100)
        { 
         i=mymap.erase(it);   //----->正确
      mymap.erase(it);     //----->it失效..
        }
    }
    //first是Key, second是value;
    for(it = mymap.begin();  it!=mymap.end(); it  ) 
    { 
        cout<first<< <second.a<< <second.b<

代码2:

 

#include 
#include 
#include 
#include 
#include 
using namespace std; 
struct itemstruct 
{ 
    int   a; 
    char   b[20]; 
    itemstruct(int   t,char*str) 
    { 
     a=t; 
     strcpy(b,str); 
    } 
}; 

int main() 
{ 

  mapmymap; 
  mymap.insert(make_pair(a,itemstruct(10,hanzhou))); 
  mymap.insert(make_pair(ab,itemstruct(20,fuzhou))); 
  mymap.insert(make_pair(abc,itemstruct(30,zhengzhou))); 
  mymap.insert(make_pair(abcd,itemstruct(200,wuhan))); 
  mymap.insert(make_pair(abcde,itemstruct(150,kunming))); 
  mymap.insert(make_pair(abcdef,itemstruct(50,xiamen))); 
  map::iterator   it=mymap.begin(); 

  while(it!=mymap.end()) 
  { 
   if((it->second).a>100)
    mymap.erase(it  ); 
   else   
    it  ; 
  }

  it=mymap.begin(); 

  while(it!=mymap.end()) 
  { 
   cout<first<<   <<(it->second).a<<   <<(it->second).b<

 

 

代码3:

 

for(map::iterator   i   =   mymap.begin();   i   !=   mymap.end();) 
{ 
    if(i->second.a   >   100) 
       i   =   mymap.erase(i); 
    else 
         i; 
} 

区别与用法比较,中map容器的使用说明。 

 

 

C 中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1.头文件 #incl...

STL笔记(1)map

STL之map
ZZ from 

1.map中的元素其实就是一个pair.

  1. map的键一般不能是指针, 比如int*, char*之类的, 会出错. 常用的就用string了,int也行.
  2. map是个无序的容器, 而vector之类是有序的. 所谓有序无序是指放入的元素并不是按一定顺序放进去的, 而是乱序, 随机存放的(被映射后近似随机存放).所以遍历的时候有些效率差别.
  3. 判断有没有找到该键的内容可以这样: 
    std::map<std::string,Record>::const_iterator cIter;
    cIter = stdfile.m_map.find(s);
    if (cIter == stdfile.m_map.end()) // 没找到就是指向END了   
    {
    m_vecMoreFile.push_back(s);
    }
    如果键的内容是指针的话, 应该用NULL指针也可以判断了.
  4. 遍历:
    std::map<std::string,Record>::iterator iter;
    for (iter = m_map.begin(); iter != m_map.end(); iter )
    {
    std::string s = iter->second.filename;
    }
    由于map内容可以相当一个PAIR, 那就简单了, 用iter->second就可以取得值了.

可顺便转个其它的几种用法: 
1 头文件
#include <map>

2 定义
map<string, int> my_Map;
或者是typedef map<string, int> MY_MAP;
MY_MAP my_Map;

3 插入数据
(1) my_Map["a"] = 1;
(2) my_Map.insert(map<string, int>::value_type("b",2));
(3) my_Map.insert(pair<string,int>("c",3));
(4) my_Map.insert(make_pair("d",4));

4 查找数据和修改数据
(1) int i = my_Map["a"];
my_Map["a"] = i;
(2) MY_MAP::iterator my_Itr;
my_Itr.find("b");
int j = my_Itr->second;
my_Itr->second = j;
不过注意,键本身是不能被修改的,除非删除。

5 删除数据
(1) my_Map.erase(my_Itr);
(2) my_Map.erase("c");
还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。

6 迭代数据
for (my_Itr=my_Map.begin(); my_Itr!=my_Map.end(); my_Itr) {}

7 其它方法
my_Map.size() 返回元素数目
my_Map.empty() 判断是否为空
my_Map.clear() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等

遍历:

 

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

int main(){
 map<int,int>M;
 M[1]=2;
 M[2]=3;
 map<int,int>::iterator iter;
 for (iter = M.begin(); iter != M.end(); iter )
 {
  cout<<iter->first<<" "<<iter->second<<endl;
 }
 return 0;
}  

一个综合例子:

// WordCpp.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    map <string, int> wcmap;
    for(int i=0;i<129;i )
    {
        char word[100];
        sprintf(word,"word%d",i);
        wcmap.insert(make_pair((string)word, 0)).first->second  ;
    }

    // output
    for(map<string, int>::iterator it = wcmap.begin(); it != wcmap.end();  it)
    {
        cout << it->first << " " << it->second << endl;
    }
    return 0;
}

 

     c.resize();                   重新设置vector的容量

    c.rbegin();                  将vector反转后的开始指针返回(其实就是原来的end-1)

    c.insert(p,elem);          在指针p指向的位置插入数据elem,返回指向elem位置的指针       

   vector<ElemType> c(n,elem); 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;

    c1.swap(c2);               交换两个容器中的数据

using std::vector;     vector<int> v;

建议使用全局的命名域方式:

在上大致讲述了vector类中所含有的函数和操作,下面继续讨论如何使用vector容器;

3.vector中的操作

4.二维容器

    c.push_back(elem);   在容器最后位置添加一个元素elem

图片 1
3.排序和查询

    c.front();                     返回容器最开始单元数据的引用

    c.at(index);                返回指定index位置处的元素

 

图片 2

    c.clear();                    清除所有数据

图片 3

    同at()函数的作用相同,即取容器中的数据。

    c.size();                      返回当前容器中实际存放元素的个数

 

deque
   双端队列 double-end queue
   deque是在功能上合并了vector和list。
   优点:(1) 随机访问方便,即支持[ ]操作符和vector.at()
               (2) 在内部方便的进行插入和删除操作
               (3) 可在两端进行push、pop
   缺点:(1) 占用内存多

使用区别:

     1 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
     2 如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
     3 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

本文由澳门正规赌博十大网站发布于澳门游戏网站,转载请注明出处:区别与用法比较,中map容器的使用说明