我设置了一个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数,但编译器是给我一个错误。
答案 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::map
和std::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"];