映射大小() > 0 但开始() == 结束()
Map size() > 0 but begin() == end()
我正在编写一个将数据存储在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。同样,我可以看到data.empty()
的计算结果为false
.但是,当我打印data.begin()
和data.end()
的地址时,它们是相同的,对我来说,这意味着地图实际上是空的。我怀疑问题与此有关——循环试图it->first
但不能,因为地图似乎是空的(...即使不是?
我错过了什么?(我真的很陌生,在StackOverflow上写问题...如果我需要提供更多信息,请告诉我。
采用上面的类,并在 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
这似乎按预期工作。
http://coliru.stacked-crooked.com/a/77b6a699ad3485a5
相关文章:
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何显示函数开始、结束行和函数体?
- C++ 从具有开始位置和结束位置的列表中删除
- C++程序从主程序开始执行并在主程序结束?
- 如何使用Chrono或ctime libaray输入设置的开始和结束时间
- 是否可以在基于范围的 for 循环中使用模板化的开始/结束方法
- 重写自定义数组类的运算符/开始/结束
- 取代表开始/结束的数字对,并删除重叠
- 如何为一个类提供多个开始/结束代理
- 映射大小() > 0 但开始() == 结束()
- 将数组作为函数参数传递,并在其上调用开始/结束方法
- 正则表达式,捕获 4 个被 括起来的数字.或行开始/结束
- C++ 指针上的开始/结束 (arr) - 调用 'begin(int**&)' 没有匹配函数
- 重载指向集合的指针的开始/结束是否是个好主意
- 检测 D3D 挂钩中的帧开始/结束
- C ::P在循环开始结束时发出声音循环声音
- 三次样条:开始/结束段插值
- Std::regex,匹配字符串的开始/结束
- 匹配开始/结束分析调用