使用string类型的键返回map值

时间:2017-02-12 20:33:04

标签: c++ dictionary maps

我设置了一个map<string, int>,使得每个键(字符串类型)都包含一个数字值,就像这样

+++++++++++++++
key   |  value
+++++++++++++++
red   |   0
blue  |   1
orange|   3

等...

是否有返回int值的成员函数?
我已经尝试过使用像这样的

band1 = band.find("a");
band2 = band.find("b");
band3 = band.find("c");
band4 = band.find("d");

其中a,b,c和d是输入字符串中应该具有匹配索引的字符串,我希望返回值(band1,2,3,4)是相应的int数,但编译器是给我一个错误。

3 个答案:

答案 0 :(得分:3)

find返回指向找到的键值pair(如果有)的迭代器。您必须取消引用该迭代器才能获得实际的映射值:

int band1;
auto it = band.find("a");
if (it != band.end())
  band1 = it->second;
else
  /* not found ... */;

请注意,*it只会向我们提供包含密钥和映射值的std::pair。要访问映射值本身,我们使用it->second

或者,如果您知道密钥位于map中,则可以使用at获取该密钥的映射值:

int band1 = band.at("a");
如果找不到该元素,

at将抛出out_of_range异常。

最后,如果要使用键"a"访问该值,并且您希望自动将该键添加到map(如果它尚不存在),则可以使用下标运算符{{1 }}:

[]

答案 1 :(得分:0)

编写一个函数,该函数将std::mapstd::vector作为参数。它将返回std::vector

中的相应值
vector<int> valueReturn(map<string,int> data, vector<string> key) {
    vector<int> value;
    for(const auto& it: key) {
        auto search = data.find(it);
        if(search != data.end()) {
            value.push_back(data[it]);
            std::cout << "Found " << search->first << " " << search->second << '\n';
        }
        else {
            value.push_back(-1); // Inserting -1 for not found value, You can insert some other values too. Which is not used as value
            std::cout << "Not found\n";
        }
    }
    return value;
}

答案 2 :(得分:-1)

int band1 = band["a"];
int band2 = band["b"];
int band3 = band["c"];
int band4 = band["d"];