为什么我的std :: Map失去了价值
Why is my std::map losing its values?
我有一个具有成员对象polymap的类多项式。
std::map<int,int> polyMap;
Polynomial() {}
Polynomial(const Polynomial& rhs){
polyMap=rhs.polyMap;
}
~Polynomial() {
}
我正在读取文件中的行,并使用成对的int对映射填充图,一个是键,另一个作为值。
我使用函数从文本文件中填充多个多项式,并填充其地图
Polynomial* populateFields(const char* filename) {
ifstream infile(filename);
int i;
int z;
string s;
Polynomial* arr = new Polynomial[numLinesInFile(filename)];
int index = 0;
while (!infile.eof()) {
getline(infile, s);
stringstream t(s);
Polynomial* poly = new Polynomial;
arr[index] = *poly;
index = index + 1;
while (t >> i >> z) {
poly->polyMap[z] = i;
}
}
return arr;
}
当我尝试访问主函数中的多项式映射时,其值始终返回零。
为什么我的地图丢失了值?据我了解,地图是智能指针,地图对象destructor是否在我的PopulateFields功能的末尾被调用?
您在初始化数据之前进行副本:
while (getline(infile, s)) {
stringstream t(s);
Polynomial poly;
while (t >> i >> z) {
poly.polyMap[z] = i;
}
arr[index] = poly;
index = index + 1;
}
或用std::vector
重写:
std::vector<Polynomial> populateFields(const char* filename) {
std::vector<Polynomial> res;
std::ifstream infile(filename);
std::string s;
while (getline(infile, s)) {
std::stringstream t(s);
res.emplace_back();
Polynomial& poly = res.back();
int i;
int z;
while (t >> i >> z) {
poly.polyMap[z] = i;
}
}
return res;
}
这是做到这一点的另一种方法:
#include <vector>
#include <map>
#include <fstream>
#include <string>
#include <sstream>
struct Polynomial {
Polynomial(const std::string& line) {
std::istringstream iss{line};
for(int i{}, z{}; iss >> i >> z;)
polyMap[z] = i;
}
std::map<int, int> polyMap;
};
std::istream& operator>>(std::istream& is, std::vector<Polynomial>& poly)
{
for(std::string line; std::getline(is, line);)
poly.emplace_back(line);
return is;
}
int main()
{
std::vector<Polynomial> polys;
std::ifstream{"infile.txt"} >> polys;
}
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- 为什么我的std :: Map失去了价值