C++ 如何在地图c+;中添加两个以上的模板+;?
目前我正试图实现一个地图数据结构来解决我的问题,但我只能向一个地图添加两个模板。比如说C++ 如何在地图c+;中添加两个以上的模板+;?,c++,dictionary,C++,Dictionary,目前我正试图实现一个地图数据结构来解决我的问题,但我只能向一个地图添加两个模板。比如说 map<string, int> data; 这是密码 void Teacher::modifyScore(string newName, int newEnglish, int newMath, int newBio) { // Holds file data map<string, int, int, int> data; // Read fi
map<string, int> data;
这是密码
void Teacher::modifyScore(string newName, int newEnglish, int newMath, int newBio) {
// Holds file data
map<string, int, int, int> data;
// Read file and fill data map
ifstream studentRec("StudentRecord.txt");
string line;
while (getline(studentRec, line))
{
string name;
int english;
int math;
int bio;
stringstream ss(line);
ss >> name >> english >> math >> bio;
data[name] = english;
data[name] = math;
data[name] = bio;
}
studentRec.close();
// Print data
for (auto& entry : data)
{
cout << entry.first << " " << entry.second << endl;
}
// Modify data
if(data[newEnglish] != 0) {
data[newName] = newEnglish;
}
if(data[newMath] != 0) {
data[newName] = newMath;
}
if(data[newBio] != 0) {
data[newName] = newBio;
}
// if(data[newChemical] != 0) {
// data[newName] = newChemical;
// }
// Open same file for output, overwrite existing data
ofstream ofs("StudentRecord.txt");
for (auto& entry : data)
{
ofs << entry.first << setw(10) << entry.second << setw(10) << entry.third << setw(10) << entry.fourth << endl;
}
ofs.close();
}
void Teacher::modifyScore(字符串newName、int newEnglish、int newMath、int newBio){
//保存文件数据
地图数据;
//读取文件并填充数据映射
ifstream studentRec(“StudentRecord.txt”);
弦线;
while(getline(studentRec,line))
{
字符串名;
国际英语;
整数数学;
int bio;
弦流ss(线);
ss>>姓名>>英语>>数学>>生物;
数据[名称]=英文;
数据[名称]=数学;
数据[名称]=生物;
}
studentRec.close();
//打印数据
用于(自动输入:数据(&T)
{
cout您需要使用的是一个元组
映射只能存储两个参数:keytype和datatype,从概念上讲,您需要一个存储多个数据类型的数据类型
你的地图会变成
std::map<std::string, std::tuple<int, int, int>> data;
编辑2:
在while循环中,代码
data[name] = english;
data[name] = math;
data[name] = bio;
将成为
data[name] = std::make_tuple(english, math, bio);
tie(newEnglish, newBio, newMath) = entry.second;
of << entry.first << setw(10) << newEnglish << setw(10) << newBio << setw(10) << newMath << endl;
编辑3
要访问元组数据,需要使用std::tie
int english, bio, math;
std::tie(english, bio, math) = data["batman"];
编辑4
在映射上迭代的for循环中访问元组数据的最小样本
#include <map>
#include <tuple>
int main()
{
std::map<int, std::tuple<int, int, int>> data;
for (const auto& entry : data)
{
int a, b, c;
std::tie(a, b, c) = entry.second;
}
return 0;
}
#包括
#包括
int main()
{
地图数据;
用于(常数自动输入:数据)
{
INTA、b、c;
std::tie(a,b,c)=entry.second;
}
返回0;
}
编辑5
tie函数将元组数据提取到提供的变量中
你的代码
tie(newEnglish, newBio, newMath) = entry.second;
of << entry.first << setw(10) << ?? << setw(10) << ?? << setw(10) << ?? << endl;
tie(newEnglish、newBio、newMath)=entry.second;
关于如何输入数据,例如entry.first、entry.second[0]?在while循环中,我应该输入什么?data[name]=?如何扩展它?&entry.second[?]。我尝试使用&get(entry)但它仍然显示内存分配,而不是实际值。应该不需要特殊语法,只需在示例代码周围放置一个for循环。我将添加一些代码以澄清请学习正确的术语。“将模板添加到映射”这完全是胡说八道。您要做的是使用类型参数实例化map类模板,其中值类型是复合类型。
#include <map>
#include <tuple>
int main()
{
std::map<int, std::tuple<int, int, int>> data;
for (const auto& entry : data)
{
int a, b, c;
std::tie(a, b, c) = entry.second;
}
return 0;
}
tie(newEnglish, newBio, newMath) = entry.second;
of << entry.first << setw(10) << ?? << setw(10) << ?? << setw(10) << ?? << endl;
tie(newEnglish, newBio, newMath) = entry.second;
of << entry.first << setw(10) << newEnglish << setw(10) << newBio << setw(10) << newMath << endl;