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ラッパーをキーとして使用できます。

そうは言っても、賢いよりももう少し明示的であり、独自のget/setインターフェイスを備えた別個のINIクラスを持っている方がまだ良いです。

于 2010-12-25T01:43:54.480 に答える