映射表(map)

  在每个条目被插入时将之按键进行排序。取迭代器指向值时将返回value_type结构,它有两个数据成员:first,second。访问first获得键的数据,访问second获得值的数据。

  除了迭代器访问外,映射表还提供通过它们的键值随机访问的接口(可以用数组进行访问)。

 #pragma warning (disable:4786)
#include<iostream>
#include<map>
#include<string>
#include<algorithm>
using namespace std; template<typename F,typename S>
class value_equals
{
private:
S second;
public:
value_equals(const S& s) :second(s){}
bool operator()(pair<const F, S> elem){ return elem.second == second; }
}; typedef map<int, string> isMap;
typedef isMap::value_type isValType;
typedef isMap::iterator isMapItor; void main()
{
isMap c; c.insert(isValType(, "OneHundred"));
c.insert(isValType(, "Three"));
c.insert(isValType(, "OneHundredFifty"));
c.insert(isValType(, "NinetyNine")); for (isMapItor itor = c.begin(); itor != c.end(); ++itor)
{
cout << "Key = " << itor->first << ",Value = " << itor->second << endl;
} //你可以通过关联数组方式访问映射表
cout << "Key 3 displays value " << c[].c_str() << endl;
//或者以关联数组方式插入键/值对
c[] = "OneHundredTwentyThree";
//基于键找到并删除一个特定值
isMapItor pos = c.find();
if (pos != c.end())
c.erase(pos); //基于值找到并删除元素
pos = find_if(c.begin(), c.end(), value_equals<int, string>("NinetyNine"));
if (pos != c.end())
c.erase(pos);
//如果你需要在遍历链表时删除元素
for (isMapItor itor = c.begin(); itor != c.end();)
{
if (itor->second == "Three")
c.erase(itor++);
else
++itor;
}
}

  注意 !!

 for (isMapItor itor = c.begin(); itor != c.end();)
{
if (itor->second == "Three")
c.erase(itor++);
else
++itor;
}

  如果你需要迭代遍历并手工在映射表中删除对象,需要注意。STL设计者没有像其他容器那样提供一个erase()函数来删除特定元素并返回下一个有效位置。所以,我们不得不在删除后重新排序,以使我们的迭代器不会失效。在这个例子中,与在for循环语句中步进迭代器不同,我们在循环体内以条件语句的方式完成迭代器工作。注意,当一个元素需要删除,我们在将迭代器作为参数传递给erase()后使用后置递增运算符步进此迭代器。但如果此元素不需要删除,我们使用标准前置递增运算符。因为操作顺序的不同,这个方法允许在不使用临时迭代器进行重新排序的情况下进行安全的迭代操作。 

最新文章

  1. ipa如何通过网络进行安装
  2. XInitThreads与XLIB
  3. C#位操作(转)
  4. 《python核心编程》笔记——系统限制
  5. crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫
  6. 为什么国内的网盘公司都在 TB 的级别上竞争,成本会不会太高?(还有好多其它回复)
  7. springmvc如何访问静态文件,例如jpg,js,css
  8. Flash cc 添加目标Flash Player
  9. jQuery的dataTables插件实现中文排序
  10. 《principles of model checking》中的离散时间马尔科夫链
  11. 如何在Centos 7上用Logrotate管理日志文件
  12. Memcache操作类
  13. TensorFlow的梯度裁剪
  14. VMware下centos桥接模式静态ip配置
  15. php Pthread 多线程 (三) Mutex 互斥量
  16. Spring.profile实现开发、测试和生产环境的配置和切换
  17. JAVA基本常识及环境搭建
  18. mysql 基本操作 alter
  19. c语言split的实现代码
  20. OpenCV代码提取:flip函数的实现

热门文章

  1. BZOJ3994:约数个数和(莫比乌斯反演:求[1,N]*[1,M]的矩阵的因子个数)
  2. HDU2604 Queuing 矩阵初识
  3. PHP5.3、PHP5.4、PHP5.5、PHP5.6的新特性
  4. 使用php生成数字、字母组合验证码(一)
  5. 关于python urlopen 一个类似radio流的timeout方法
  6. (转)JavaMail中的Flag(邮件状态)
  7. python 高阶内置函数
  8. xss 攻击 sql 注入
  9. Java运算符 逻辑运算符 短路运算符
  10. var与Javascript变量隐式声明