我想找个一个map中的第二个值,想问问应该怎么写

解决方案 »

  1.   

    是这样,我定义了一个map,map<long,string>,我除了想查询一个map的key,还想根据map中的第二个值找到一个项,然后我想把这个项删除,代码如下:
    for (map<long,string>::iterator it1 = m_contCallidUcid.begin(); it1 != m_contCallidUcid.end(); it1++)
    {
    if (it1->second == ucid)
    {
    callid = it1->first;
    TRACELOG(Information, _T("改变 m_contCallidUcid 中的 key:")<<it1->first);
    it = it1;
    }
    }
    m_contCallidUcid.erase(it);
    可是当map中没有这个值的时候,他会报错,我应该怎么写啊
      

  2.   

    bool bFind = false;
    for (map<long,string>::iterator it1 = m_contCallidUcid.begin(); it1 != m_contCallidUcid.end(); it1++)
    {
    if (it1->second == ucid)
    {
    callid = it1->first;
    TRACELOG(Information, _T("改变 m_contCallidUcid 中的 key:")<<it1->first);
    it = it1;
    bFind = true;
    }
    }
    if (bFind)
    {
    m_contCallidUcid.erase(it);
    }
      

  3.   

    Map还用迭代器,完全体现不了Map的作用了
      

  4.   

    2楼已经给出你要的答案了.就是你没有判断it是否找到, 你的程序是不管找没有找到都去erase,想erase没有的,当然会出错了.
      

  5.   

    哦,it我是在之前定义的。我明白三楼的意思啦,还想问个问题,我这个map<long,string>的,我想把第二个值直接取出来,这样写的stirng id = it1->second;可是出来的值是乱码啊,这是为什么,我调试了一下,看见it1里面的值和map中我需要的那个值不同啊,问一下是应该这样的吗
      

  6.   

    谢谢2楼,用你的方法实现啦,问一下4楼,如果不用迭代器map怎么取其中的值呢
      

  7.   

    iterator::iter = map.find();