std::map 有没有办法像键的谓词一样“编辑”值?
Posted
技术标签:
【中文标题】std::map 有没有办法像键的谓词一样“编辑”值?【英文标题】:Is there a way for std::map to "edit" values like a predicate for the key? 【发布时间】:2010-12-25 01:35:43 【问题描述】:我想知道是否可以为 std::map 的所有值创建一个谓词之类的东西,这样我就不必在将值插入地图之前对其进行编辑。
我想要的是这样的:
mymap["username"] = " Marlon "; // notice the space on both sides of my name
assert(mymap["username"] == "Marlon"); // no more whitespace
上下文是我正在为 .ini 文件创建一个 std::map 并且我希望它在我想要检索它们时自动从值中删除前导/尾随空格。我已经创建了一个谓词来忽略键中的大小写和空格,所以我想知道是否可以对值执行相同的操作。
【问题讨论】:
在插入或检索值时修剪它们? ***.com/questions/122616/… 不要粗鲁,但为了我要问的问题,请阅读我用粗体写的内容。 你为什么要这个?在插入之前修改它们有那么糟糕吗? 了解在 C++ 中是否可行。了解一种语言的能力不是很好吗? :D C++ 可以做很多事情。这并不是一个好主意。 (至于确定一种语言的能力,我想说知道它是图灵完备的就足够了...... :-)) 【参考方案1】:我认为您必须遵循重载原则才能达到预期的目标, 试试这个选项,
//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 又是一个可以为 '==' 运算符重载以进行修剪的类。 我知道地图可以实现为一个类(包装器),然后用于实现所需的结果。可能需要更多的努力才能解决这个问题。
【讨论】:
【参考方案2】:你可以有一个包装器类来包装std::string
和
-
可从
std::string
隐式构造
实现来自std::string
的转换运算符。
您可以在这些函数中的任何一个中动态编辑值。您std::map
可以将包装器作为密钥。
话虽如此,还是更明确一点,而不是聪明一点,并拥有一个具有自己的 get/set 接口的单独 INI 类。
【讨论】:
以上是关于std::map 有没有办法像键的谓词一样“编辑”值?的主要内容,如果未能解决你的问题,请参考以下文章
使用 C 类型 uuid_t 作为 std::map 中的键的最佳方法是啥?
在普通键的情况下使用map over unordered_map有什么好处吗?