3

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

我想要的是这样的:

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

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

4

2 回答 2

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 又是一个类,可以为 '==' 运算符重载以进行修剪。
我知道地图可以实现为一个类(包装器),然后用于实现所需的结果。可能多花点功夫就能解决这个问题。

于 2010-12-25T07:58:12.657 回答
1

你可以有一个包装类,它包装std::string

  1. 是隐式可构造的std::string
  2. 从 实现转换运算符std::string

您可以在这些功能中的任何一个中即时编辑值。您std::map可以将包装器用作键。

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

于 2010-12-25T01:43:54.480 回答