背景
某一种数据,会有重复记录,后附加各类数据。利用map的唯一性,将重复者过滤。并将附加的数据存储到结构体,方便在代码中使用。后续可写入文件或数据。
实例:某一路段至少有一个门架,门架有各种数据。简单示例:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <iostream> #include <fstream> #include <string> #include <vector> #include <map>
// 分割string std::vector<std::string> stringSplit(const std::string& s, const std::string& delim) { std::vector<std::string> elems; size_t pos = 0; size_t len = s.length(); size_t delim_len = delim.length(); if (delim_len == 0) return elems; while (pos < len) { int find_pos = s.find(delim, pos); if (find_pos < 0) { elems.push_back(s.substr(pos, len - pos)); break; } elems.push_back(s.substr(pos, find_pos - pos)); pos = find_pos + delim_len; } return elems; }
typedef struct tGantryDist_t { int preDist; int nextDist; } GantryDist_t;
// tmpe void ReadGantry(const char* filename) { std::fstream f(filename); std::string line; GantryDist_t gantryDist; std::map<std::string, GantryDist_t> tmpGantryM; std::vector<std::string> tmpV;
truewhile (std::getline(f, line)) true{ tmpV = stringSplit(line, " "); gantryDist.preDist = std::stoi(tmpV[1]); gantryDist.nextDist = std::stoi(tmpV[2]); tmpGantryM.insert(std::pair<std::string, GantryDist_t>(tmpV[0].c_str(), gantryDist)); true}
for (auto it: tmpGantryM) {
gantryDist = static_cast<GantryDist_t>(it.second); printf("result: %s %d %d\n", it.first.c_str(), gantryDist.preDist, gantryDist.nextDist); } }
|