c++ map使用问题和迭代器问题 编译器:VS2010旗舰版
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ map使用问题和迭代器问题 编译器:VS2010旗舰版相关的知识,希望对你有一定的参考价值。
代码:
#include<iostream>
#include<map>
#include<string>
using namespace std;
typedef map<string, string>::const_iterator CIT;
typedef map<string,string>::value_type cit;
template<class T1,class T2>
void show(CIT &c,map<T1,T2>&n)
for(c=n.begin();c!=n.end();++c)
cout<<c->first<<"\t"<<c->second<<endl;
int main()
string str="武汉";
map<string,string> name,name1;
name["范伟"]=str;
name1["牛若军"]="青岛";
name1.insert(name1.end(),cit("朱然","长春"));
name.insert(name1.begin(),name1.end());
cout<<"映射容器name中共有"<<name.size()<<"个元素\n";
CIT it;
show(it,name);
cout<<"查找关键字为“朱然”的所有类容并输出\n";
it=name.find("朱然");
if(it==name.end())
cout<<"没有这个关键字\n";
else
cout<<it->first<<"\t"<<it->second<<endl;
cout<<"关键字等于“范伟”的元素个数为:"<<name.count("范伟")<<endl;
cout<<"删除关键字为" 范伟 "的所有元素。\n";
name.erase("范伟");
cout<<"再次输出映射容器name中的所有元素.\n";
show(it,name);
cout<<"删除映射容器name中所有元素\n";
name.clear();
if(name.empty())
cout<<"映射容器name为空\n";
else
show(it,name);
system("pause");
return 0;
错误:
e:\c语言\123\123.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>e:\c语言\123\123.cpp(19): error C2001: 常量中有换行符
1>e:\c语言\123\123.cpp(19): error C2146: 语法错误: 缺少“]”(在标识符“闱掑矝”的前面)
1>e:\c语言\123\123.cpp(22): error C2001: 常量中有换行符
1>e:\c语言\123\123.cpp(22): error C2146: 语法错误: 缺少“;”(在标识符“涓厓绱燶n”的前面)
1>e:\c语言\123\123.cpp(22): error C2065: “涓厓绱燶n”: 未声明的标识符
1>e:\c语言\123\123.cpp(22): error C2143: 语法错误 : 缺少“;”(在“字符串”的前面)
1>e:\c语言\123\123.cpp(23): error C2146: 语法错误: 缺少“;”(在标识符“CIT”的前面)
1>e:\c语言\123\123.cpp(23): error C2146: 语法错误: 缺少“;”(在标识符“it”的前面)
1>e:\c语言\123\123.cpp(23): error C2275: “CIT”: 将此类型用作表达式非法
1> e:\c语言\123\123.cpp(5) : 参见“CIT”的声明
1>e:\c语言\123\123.cpp(23): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(24): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(26): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(27): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(30): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(30): error C2227: “->first”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>e:\c语言\123\123.cpp(30): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(30): error C2227: “->second”的左边必须指向类/结构/联合/泛型类型
1> 类型是“'unknown-type'”
1>e:\c语言\123\123.cpp(32): error C2146: 语法错误: 缺少“;”(在标识符“锣冧紵”的前面)
1>e:\c语言\123\123.cpp(32): error C2065: “锣冧紵”: 未声明的标识符
1>e:\c语言\123\123.cpp(32): error C2143: 语法错误 : 缺少“;”(在“字符串”的前面)
1>e:\c语言\123\123.cpp(35): error C2065: “it”: 未声明的标识符
1>e:\c语言\123\123.cpp(41): error C2065: “it”: 未声明的标识符
改为
cout<<"删除关键字为\" 范伟 \"的所有元素。\n";
在解决方案窗口中对项目名鼠标右击,选择属性,字符集选择多字节字符集 ,vs2010默认是用unicode字符集的 参考技术A name["范伟"]=str;
这种用法非常的不方便,很多编译器都会崩溃。,还是改成这样吧
name[“doggy"]=str;
C++ STL map迭代器
一、前言
stl标准库为map容器配备的是双向迭代器(bidirectional iterator),因此map 容器迭代器只能进行 ++p、p++、--p、p--、*p 操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。
二、迭代器方法
方法 | 功能 |
---|---|
begin() | 返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
end() | 返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器 |
rbegin() | 返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器 |
rend() | 返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器 |
cbegin() | 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对 |
crbegin() | 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对 |
crend() | 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
这个的具体功能不再说明,和序列化容器是一样的功能,唯一不同的就是这里的数据是“键值对”。
对于迭代器的使用,已经有很多的实例,这里就不再说明了。
以上是关于c++ map使用问题和迭代器问题 编译器:VS2010旗舰版的主要内容,如果未能解决你的问题,请参考以下文章