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

时间:2016-03-31 11:23:58

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

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

举例说明。

Player2 has ["b", "3.4.5.6"] Player3 has ["c", "2.2.9.3"] players["b"]

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

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

你可以使用std::map吗? 甚至在where('total','=',count($tags)) to having('total','=',count($tags))

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以使用下面示例中的boost.bimap

List<InstitutionUserConnection> result = institutionsOfUser.stream().
        .map(institutionUserConnectionService::getActiveInstitutionUserConnectionsByInstitution)
        .collect(Collector.of(ArrayList::new, List::addAll,
                (left, right) -> { left.addAll(right); return left; }));

Live Demo

答案 2 :(得分:0)

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

//如果你的球员排序,你可以找到一个你的邻居值,你用2个指针代表你。得到索引,你会没事的