我正在编写一个将数据存储在std::map
中的类。使用我的add()
方法向地图添加一些对后,我尝试std::cout
这些对。然而,我写的循环是为了做到这一点"打破"一旦它试图访问第一对地图中的第一个元素。
class Database {
private:
std::map<std::string, std::string> data;
public:
void add(const std::string& key, const std::string& value) {
data.insert(std::pair<std::string, std::string>(key, value));
}
void display() const {
for (auto it = data.begin(); it != data.end(); it++) {
std::cout << it->first << "|\t" << it->second << std::endl;
}
}
// Other methods
};
如果我cout
data.size()
,我可以看到地图不是空的 - 在我的测试中,我的大小为3.同样,我可以看到{{1评估为data.empty()
。但是,当我打印false
和data.begin()
的地址时,它们是相同的,对我而言,这意味着地图实际 为空。我怀疑问题与此有关 - 循环试图获得data.end()
但它不能,因为看起来地图是空的(......即使它不是?)
我错过了什么? (我在StackOverflow上写问题真的很新......请告诉我是否需要提供更多信息。)
答案 0 :(得分:2)
上课,并在MCVE中使用......
#include <map>
#include <string>
#include <iostream>
class Database {
private:
std::map<std::string, std::string> data;
public:
void add(const std::string& key, const std::string& value) {
data.insert(std::pair<std::string, std::string>(key, value));
}
void display() const {
for (auto it = data.begin(); it != data.end(); it++) {
std::cout << it->first << "|\t" << it->second << std::endl;
}
}
// Other methods
};
int main()
{
Database d;
d.add("Hello", "World");
d.add("Foo", "Bar");
d.add("Bing", "Bong");
d.display();
}
产生以下输出:
Bing| Bong
Foo| Bar
Hello| World
这似乎按预期工作。