在类内的无序映射中添加数据



我有一个类Citydata,在.hh文件中定义

struct City_details {
string name;
int taxrate;
};
class Citydata {
public:
bool add_data(string id, string name, int taxrate)
//other member functions...
private:
unordered_map<id, City_details> info_map;

我在.cc文件中实现add_data函数时遇到问题。这是我的尝试。

bool Citydata::add_data(string id, string name, int taxes) {
if ( info_map.find(id) == info_map.end()) {
City_details dataload;
dataload.name = name;
dataload.taxrate = taxes;
info_map[id] = dataload;
return true;
}
else return false;
}

当我测试这个时,我看不到任何数据以我想要的方式添加。相反,我看到一个完全为空的条目(默认为空值(,以及一个具有正确id(键(但没有向参数添加数据的条目。每次我调用add_data时,它都会创建类似的一对,一个完全为空的密钥数据成员,然后是一个具有正确id的成员,否则就是空数据。

最初的程序比这个长得多,所以问题可能也会持续存在,但我想知道我的方法是否在设计上有缺陷。

我做了一些修改,使您的程序能够运行。

首先您应该用unordered_map<std::string, City_details> info_map;替换unordered_map<id, City_details> info_map;

第二个类中缺少add_data成员函数声明的分号;,在Stackoverflow上复制粘贴代码时可能遗漏了该分号。

第三我避免使用using namespace std;

main.cpp

#include <iostream>
#include "file.h"
int main()
{

Citydata c1;
c1.add_data("id1","Georgia", 34);
c1.add_data("id2", "California", 32);
c1.add_data("id3","Texas", 23);
//lets print out the element of info_map
for(auto &it:c1.info_map)
std::cout << it.first <<" "<<it.second.name<<" "<<it.second.taxrate<<std::endl;
return 0;
}

文件.h

#pragma once
#include <unordered_map>
#include <string>
struct City_details {
std::string name;
int taxrate;
};
class Citydata {
public:
bool add_data(std::string id, std::string name, int taxrate);
//other member functions...
//private:
std::unordered_map<std::string, City_details> info_map;//the first tempate argument should be int and not id
};

file.cpp

#include "file.h"
bool Citydata::add_data(std::string id, std::string name, int taxes) {
if ( info_map.find(id) == info_map.end()) {
City_details dataload;
dataload.name = name;
dataload.taxrate = taxes;
info_map[id] = dataload;
return true;
}
else return false;
}

最新更新