Търся нещо като карта "Ключ към ключ" в C++.
Намерението ми е следното:
- Всеки ключ - от "лявата" или "дясната" страна е уникален
- Ключът от лявата страна може да бъде търсен от ключа от дясната страна и обратно
Като пример и за да направя намерението си по-ясно, в код вероятно ще изглежда така:
key2key<int, string> myMap; // int maps to string, string to int
myMap.insert(0, "zero");
myMap.insert(1, "one");
myMap.insert(2, "two");
myMap.insert(1, "zero"); // would throw an error
myMap.insert(9, "one"); // would throw an error as well
cout << myMap.lookupLeft(1) << endl; // prints "one"
cout << myMap.lookupRight("one") << endl; // prints "1"
Разбира се, бих могъл да приложа нещо подобно сам, но съществува ли нещо? Не искам да преоткривам колелото, така че може би е възможно да модифицирам или използвам повторно стандартните STL контейнери или да увелича.
Защо смятам, че е полезно?
Представете си, че четете конфигурационен файл и също искате да напишете или направите промени в този конфигурационен файл. Този конфигурационен файл може да съдържа някои полета, които вътрешно в c++ са представени като безопасни тип enum класове. Използването на карта "Ключ към ключ" е много лек генератор и преобразувател на типове на тези стойности.
enum class DebugLevel {error, warning, debug};
const key2key<DebugLevel, string> debugLevelMap = {
{DebugLevel::error, "error"},
{DebugLevel::warning, "warning"},
{DebugLevel::debug, "debug"},
}
DebugLevel foo = debugLevelMap.lookupRight("error");
string bar = debugLevelMap.lookupLeft(DebugLevel::warning);