我想知道是否有可能为std :: map创建类似谓词的所有值,所以在将它们插入地图之前我不必编辑它们。
我想要的是这样的:
mymap["username"] = " Marlon "; // notice the space on both sides of my name
assert(mymap["username"] == "Marlon"); // no more whitespace
上下文是我正在为.ini文件创建一个std :: map,而我希望它能在我想要检索它们时自动从值中删除前导/尾随空格。我已经创建了一个谓词来忽略密钥中的套管和空格,所以我想知道是否可以对值进行相同的操作。
答案 0 :(得分:2)
我认为你必须遵循超载原则来达到预期的目标, 试试这个选项,
//map<string,string> testMap; Old Map definition
tMap testMap;
其中,
class tMap
{
public:
map<mystring,string> _tMap;
mystring& operator [] (const char *index)
{
return _tMap[index];
}
};
mystring又是一个可以为'=='运算符重载的类,用于修剪 我知道地图可以作为一个类(Wrapper)实现,然后用于实现所需的结果。可能会有更多的努力来解决这个问题。
答案 1 :(得分:1)
您可以拥有一个包装std::string
和
std::string
std::string
实现转换运算符。您可以在其中任何一个功能中动态编辑值。您std::map
可以将包装器作为密钥。
话虽如此,它仍然更好一点,而不是聪明,并且有一个单独的INI类,它有自己的get / set接口。