
关于STL的map容器
我把一个东西的所有属性,都保存在map容器中,按“属性名<---->属性值”这么对应起来。但我不希望map自动根据属性名进行排序,所以,我把map<>中的第三个参数,设为...
我把一个东西的所有属性,都保存在map容器中,按“属性名<---->属性值”这么对应起来。但我不希望map自动根据属性名进行排序,所以,我把map<>中的第三个参数,设为自己写的一个类,此类中的()操作符,直接返回true,由此,便屏蔽了map的自动排序。
我的担心是:这样做,会对map::find()函数有什么影响吗?如果有,我该怎么办? 展开
我的担心是:这样做,会对map::find()函数有什么影响吗?如果有,我该怎么办? 展开
2个回答
展开全部
我刚才试了下,程序崩溃!
因为map内部的insert、find等函数是按照一定的排序规则执行的。
如果直接返回true,就没了比较规则会出现错误;
如果非要用find函数自定义个find函数就可以了啊,比如这样:
string find(map<string,string,sort> &m,const &string s)
{
for(map<string,string,sort>::iterator it=m.begin();it!=m.end();++it)
if(s==it->first)
return it->second;
return "";
}
或者可以定义一个子类,重写find函数
class subMap:public map<string,string,sort>
{
public:
string find(const string &s)
{
iterator it;
for(it=begin();it!=end();++it)
{
if(it->first==s)
return it->second;
}
return "";
}
};
这样你用map的其它成员函数时都要重载!
不知道你具体问题是什么,应该还有更好的方法实现。
因为map内部的insert、find等函数是按照一定的排序规则执行的。
如果直接返回true,就没了比较规则会出现错误;
如果非要用find函数自定义个find函数就可以了啊,比如这样:
string find(map<string,string,sort> &m,const &string s)
{
for(map<string,string,sort>::iterator it=m.begin();it!=m.end();++it)
if(s==it->first)
return it->second;
return "";
}
或者可以定义一个子类,重写find函数
class subMap:public map<string,string,sort>
{
public:
string find(const string &s)
{
iterator it;
for(it=begin();it!=end();++it)
{
if(it->first==s)
return it->second;
}
return "";
}
};
这样你用map的其它成员函数时都要重载!
不知道你具体问题是什么,应该还有更好的方法实现。
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询