在下面的代码中,[id, name]
是一个const引用。然而,studentMap是不连续的.用户可以在循环中更改studentMap的值。我想问一问是否有一种方法使StudentMap也const。谢谢。
#include <iostream>
#include <string>
#include <map>
int main() {
std::map<int, std::string> studentMap;
studentMap[1] = "Tom";
studentMap[7] = "Jack";
studentMap[15] = "John";
for (const auto& [id, name] : studentMap) {
studentMap.at(id) += "test";
}
for (const auto& [id, name]: studentMap) {
std::cout << id << " " << name << "\n";
}
return 0;
}
发布于 2022-05-04 19:40:03
不,我认为改变变量的类型是不可能的。
如果要避免修改studentMap
这一意外错误,可以将逻辑提取到单独的函数中,并使用const引用studentMap
:
#include <iostream>
#include <string>
#include <map>
void displayStudentMap(const auto& studentMap) {
for (const auto& [id, name] : studentMap) {
// compilation error
studentMap.at(id) += "test";
}
for (const auto& [id, name]: studentMap) {
std::cout << id << " " << name << "\n";
}
}
int main() {
std::map<int, std::string> studentMap;
studentMap[1] = "Tom";
studentMap[7] = "Jack";
studentMap[15] = "John";
displayStudentMap(studentMap);
}
发布于 2022-05-05 00:59:52
这条路:
const std::map<int, std::string> studentMap {
std::make_pair(1, "Tom"),
std::make_pair(7, "Jack"),
std::make_pair(15, "John")
};
https://stackoverflow.com/questions/72121592
复制相似问题