如何检查地图值中是否有元素

时间:2018-09-03 20:16:57

标签: c++

有一个map结构的map<string, vector<string>> buses;,我有一个string,所以我需要找出如何检查string中包含的map向量。

string stop;
cin >> stop;

if (buses.find(stop) != buses.end()) {
    cout << "Yes";
} else {
    cout << "No";
}

当我得到一个stop字符串时,我需要检查map的值(不是键,为了更精确地在map.second中),一个字符串等于stop字符串,如果是,我需要打印出所有包含stop元素值的键。 { {"bus#1", {"stop#1", "stop#2", "stop#3"}}, ... }

2 个答案:

答案 0 :(得分:1)

一种方法是遍历所有地图元素,然后在值向量上使用std::find。不过,这确实效率很低。

相反,您应该使用std::multimap<std::string, std::string>(如果不需要排序,则使用std::unordered_multimap),并使用Stops作为键。然后,在该键中添加所有使用所述车站的公交车,如果要获取该车站的所有公交车,请使用find

答案 1 :(得分:-1)

我想这就是你想要做的。

#include <map>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    map<string, vector<string>> buses;

    buses["some stop"] = vector<string>();

    if (buses.find("some stop") != buses.end()) {
        cout << "Yes";
    }
    else {
        cout << "No";
    }
}

您确定map是您要用于此任务的数据结构吗?

否则,如果您只想查看停靠点是否在数据结构中,则可能要签出std::set