读书人

map insert异常

发布时间: 2012-03-19 22:03:05 作者: rapoo

map insert错误
我定义了结构:
typedef std::map<std::string, std::string> PAIR_T;
typedef struct config_struct
{
std::string section;
PAIR_T pair;
} CONFIG_T;

按如下执行insert:
std::vector<CONFIG_T> m_Param;
for (std::vector<CONFIG_T>::const_iterator itr1 = m_Param.begin(); itr1 != m_Param.end(); ++itr1)
{
if ((itr1->section).compare(section) == 0)
{
PAIR_T::const_iterator itr2 = (itr1->pair).find(param);
if (itr2 != (itr1->pair).end())
{
(itr1->pair).erase(itr2);
}
(itr1->pair).insert(PAIR_T::value_type(param, value));
break;
}
}

出现如下错误:
error C2663: 'insert' : 3 overloads have no legal conversion for 'this' pointer

请问怎么回事啊?谢谢了

[解决办法]
itr1->section...itr1是vector的迭代器,怎么能这样用呢?应该是*itr1...
[解决办法]

C/C++ code
PAIR_T mp;mp.insert(make_pair(param, value));(itr1->pair).insert(mp)
[解决办法]
PAIR_T pair;//加上mutable
[解决办法]
map 主键值最好不要用string 如果要用string, 就用multimap
[解决办法]
C/C++ code
typedef std::map<std::string, std::string> PAIR_T;typedef struct config_struct{    std::string section;    PAIR_T pair;} CONFIG_T;vector<CONFIG_T> m_Param;typedef pair <std::string, std::string> Int_Pair;void show(){    for(std::vector<CONFIG_T>::iterator itr1 = m_Param.begin(); itr1 != m_Param.end(); ++itr1)    {        if ((itr1->section).compare("") == 0)        {            PAIR_T::iterator itr2 = (itr1->pair).find("0");            if (itr2 != (itr1->pair).end())            {                ((itr1->pair)).erase(itr2);            }            (itr1->pair).insert(Int_Pair("", ""));             break;        }    }} 

读书人网 >C++

热点推荐