c++ - 使用 C++ 中的多个键之一访问相同的值?

标签 c++ c++11 dictionary vector key

我需要一种通过传入值可能具有的任何键来访问值的方法。 例如,可以通过其 ip 地址或名称访问的播放器对象?

举例说明。

Player1 有 ["a", "1.2.3.4"] Player2 有 ["b", "3.4.5.6"] Player3 有 ["c", "2.2.9.3"]

因此,要访问 Player2,我可以使用 players["b"]players["3.4.5.6"]

我应该为此迭代一个 vector 吗?但我计划有大约 100 个元素,那么树状容器会比数组列表更好吗?

你能为此使用 std::multimap 吗? 或者甚至在 std::map 中?

最佳答案

确保 ipname 是唯一的。

map<string, Player> byNameMap;
map<string, Player> byIpMap;

void add(Player p) {
    byNameMap[p.name] = p;
    byIpMap[p.ip] = p;
}

void remove(Player p) {
    byNameMap.erase(byNameMap.find(p.name));
    byIpMap.erase(byIpMap.find(p.ip));
}

// assuming you are sure player with such name exists
void removeByName(string name) {
    remove(byNameMap[name]);
}

// assuming you are sure player with such ip exists
void removeByIp(string ip) {
    remove(byIpMap[ip]);
}

关于c++ - 使用 C++ 中的多个键之一访问相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332013/

相关文章:

python - python中的事件列表数据结构

python - 从包含列表的嵌套字典创建数据框

c++ - 为什么我无法在编译时获取模板函数的参数计数?

c++ - c++11 中的 boost::variant 和多态性

c++ - 如何将字符串与 vector 值进行比较?

Javascript 语法字典(标准函数、对象、方法和关键字)

c++ - 如何调用对未覆盖的派生类函数的调用?

c++ - 如何在C++中以交替顺序添加和减去用户输入

c++ - 如何比较输入与 ASCII 码?

c++ - rastertek 教程中初始化 Direct3D 失败