有没有办法让std :: map“编辑”像键的谓词一样?

时间:2010-12-25 01:35:44

标签: c++ predicate stdmap

我想知道是否有可能为std :: map创建类似谓词的所有值,所以在将它们插入地图之前我不必编辑它们。

我想要的是这样的:

mymap["username"] = " Marlon "; // notice the space on both sides of my name
assert(mymap["username"] == "Marlon"); // no more whitespace

上下文是我正在为.ini文件创建一个std :: map,而我希望它能在我想要检索它们时自动从值中删除前导/尾随空格。我已经创建了一个谓词来忽略密钥中的套管和空格,所以我想知道是否可以对值进行相同的操作。

2 个答案:

答案 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

的包装器类
  1. 可以从std::string
  2. 隐式构建
  3. std::string实现转换运算符。
  4. 您可以在其中任何一个功能中动态编辑值。您std::map可以将包装器作为密钥。

    话虽如此,它仍然更好一点,而不是聪明,并且有一个单独的INI类,它有自己的get / set接口。

相关问题