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

Access same value with one of multiple keys in c++?

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

举例说明。

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

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

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

你可以用 std::multimap 吗? 甚至 std::map?

您可以使用 boost.bimap,如下例所示:

#include <iostream>
#include <string>
#include <boost/bimap.hpp>

int main() {
  typedef boost::bimap<std::string, std::string> Ipmap;
  typedef Ipmap::value_type NameIpPair;

  Ipmap players;
  players.insert(NameIpPair("a", "1.2.3.4"));
  players.insert(NameIpPair("b", "5.6.7.8"));
  players.insert(NameIpPair("c", "9.10.11.12"));

  std::cout << players.left.at("b") << std::endl;
  std::cout << players.right.at("5.6.7.8") << std::endl;
}

Live Demo

确保 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]);
}

假设你有一个播放器数组和2个指向起点的指针数组,它们是char值和ip地址。 不管你使用什么搜索算法,bjt 都包括 searchin with 和 little if 语句。例如: if(incoming_value_size ==1)//这是一个char val 然后 在 set1array 中搜索集合 除此以外 Set2数组

//如果你的球员排序,你可以找到一个有他们的邻居值的人,你用 2 个指针表示。获取索引就可以了