完璧だ。
Classes.h,Classes.cpp として
#pragma once class CPairList { private: ??? typedef std::wstring m_a; ??? typedef std::wstring m_b; ??? typedef std::pair<m_a, m_b> Pair; ??? typedef std::vector<Pair> vec_t; ??? vec_t m_vec; public: ??? void Add(LPCWSTR szKey, LPCWSTR szValue); ??? void Remove(LPCWSTR szKey); ??? std::wstring operator[](std::wstring szKey); ??? std::wstring GetValue(int i); ??? std::wstring GetKey(int i); ??? int Count(); };
//??? TODO: "StdAfx.h" #include <vector> #include "StdAfx.h" #include "Classes.h" /* *??? CPairListClass */ void CPairList::Add(LPCWSTR szKey, LPCWSTR szValue) { ??? m_vec.push_back(Pair(szKey, szValue)); } void CPairList::Remove(LPCWSTR szKey) { ??? vec_t::iterator it = m_vec.begin(); ??? vec_t::iterator itend = m_vec.end(); ??? for (; it != itend; it++)? ?? {? ?????? if ( (*it).first == szKey)? ?????? {? ?????????? m_vec.erase(it); ?????????? break;? ?????? } ??? } } std::wstring CPairList::operator[](std::wstring szKey) { ??? std::wstring result; ??? vec_t::iterator it = m_vec.begin(); ??? vec_t::iterator itend = m_vec.end(); ??? for (; it != itend; it++)? ?? {? ?????? if ( (*it).first == szKey)? ?????? {? ?????????? result = (*it).second; ?????????? break; ??????? } ?? } ??? return result; } int CPairList::Count() { ??? return m_vec.size(); } std::wstring CPairList::GetValue(int i) { ??? return m_vec[i].second; } std::wstring CPairList::GetKey(int i) { ??? return m_vec[i].first; }
と定義しておいて
CPairList aList; aList.Add(L"おまえ", L"あほ"); wstring ws = aList[L"おまえ"];
な感じで順番は保持されたままの連想配列もどきの完成、STL 恐るべし。
でも現在 ini 保存に std::map を使っているのでココでソートされてしまう…
こっちも変更しなきゃ、あぁ先は長い。
しかしワシもいつのまにかこんなコードが普通に書けるようになった。
思えば二年前に唐突にデルヒャァから C++ に乗り換えして
「やっぱりポインタがワカンネェ!意味は解るけど使い方が全然ワカンネェ!」
だったのにね。