[英]c++. How to add elements to a vector of pairs from file?
我正在嘗試將每條奇數行讀入 pair.first 並將每條偶數行讀入 pair.second 並將其放入對的向量中。 我想要一個球員和他的整體在一個向量中的一對。 這是我的代碼:
while(getline(players, player) && players >> overall)
{
pick_players.push_back(make_pair(player, overall));
}
不幸的是,它只讀取前兩行,向量 output 的 rest 只是零。 player
是一個字符串, overall
是 integer, players
是我的 fstream 文件名。
交錯std::getline
和operator>>
以讀取輸入 stream 不是一個好主意。 相反,您最好在這里堅持使用std::getline
兩次。
這樣的事情會做:
std::getline
)。std::vector<std::pair<std::string, int>>
。#include <charconv> // from_chars
#include <fmt/core.h>
#include <fmt/ranges.h>
#include <sstream> // istringstream
#include <system_error> // errc
#include <utility> // pair
#include <vector>
int main() {
std::istringstream iss{
"player1\n"
"1\n"
"player2\n"
"2ddd\n"
"player3\n"
"3 \n"
};
std::vector<std::pair<std::string, int>> players{};
for (std::string player{}, overall_str{};
getline(iss, player) and getline(iss, overall_str);) {
int overall{};
auto [ptr, ec] = std::from_chars(
overall_str.data(), overall_str.data() + overall_str.size(), overall);
if (ec == std::errc{}) {
players.push_back({player, overall});
} else {
fmt::print("Error parsing overall line: {}\n", overall_str);
continue;
}
}
fmt::print("{}\n", players);
}
// Outputs:
//
// [("player1", 1), ("player2", 2), ("player3", 3)]
可以通過以下方式加強對整行的解析:
std::from_chars
使用所有輸入字符串轉換為數字。#include <boost/algorithm/string.hpp>
...
boost::algorithm::trim(overall_str);
...
if (ec == std::errc{} and ptr == overall_str.data() + overall_str.size()) {
// Outputs:
//
// Error parsing overall line: 2ddd
// [("player1", 1), ("player3", 3)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.