C++ std::map是否有一种方法可以指向;编辑";值,比如键的谓词?

C++ std::map是否有一种方法可以指向;编辑";值,比如键的谓词?,c++,predicate,stdmap,C++,Predicate,Stdmap,我想知道是否有可能为std::map的所有值创建一个类似谓词的东西,这样我就不必在将值插入map之前编辑它们 我想要的是这样的: mymap["username"] = " Marlon "; // notice the space on both sides of my name assert(mymap["username"] == "Marlon"); // no more whitespace 上下文是我正在为一个.ini文件创建一个std::map,我希望它在检索值时自动从值中删除前

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

我想要的是这样的:

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

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

您可以有一个包装类来包装
std::string

  • 可从
    std::string
  • 实现来自
    std::string
    的转换运算符
  • 您可以在这些函数中随时编辑值。您可以将包装器作为键


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

    我认为您必须遵循重载原则才能达到预期的目标, 试试这个选项

    //map<string,string> testMap; Old Map definition
    tMap testMap;
    
    //映射testMap;旧地图定义
    tMap测试图;
    
    在哪里,

    class tMap
    {
            public:
    
                    map<mystring,string> _tMap;
    
                    mystring& operator [] (const char *index)
                    {
                            return _tMap[index];
                    }
    
    };
    
    类tMap
    {
    公众:
    地图(tMap),;
    mystring和运算符[](常量字符*索引)
    {
    返回_tMap[索引];
    }
    };
    
    mystring还是一个类,可以重载“==”运算符进行修剪。

    我知道映射可以作为类(包装器)实现,然后用于实现所需的结果。可能需要更大的努力才能解决此问题。

    在插入或检索值时是否修剪这些值?我不想粗鲁,但为了我要问的问题,请阅读我用粗体写的内容。你为什么想要这个?在插入之前修改它们是否太糟糕了,以了解它是否可能在C++中使用。了解一门语言的能力不是很好吗DC++可以做很多事情。这不是个好主意。(至于确定一种语言的能力,我认为知道它是图灵完备的就足够了…:-)