template <class... Types>
class Dataframe
{
public:
Dataframe(const std::vector<std::vector<std::string>>& input);
std::vector<std::vector<std::variant<Types...>>> Data() {
return data_;
}
private:
std::vector<std::vector<std::variant<Types...>>> data_;
};
std::vector<std::vector<std::string>> input = {{"2024-03-03", "1.3", "1"}, {"2024-04-04", "3.4", "10"}}
auto df = Dataframe<std::string, double, int>(input);
df.Data(); //expected output: {{"2024-03-03", "2024-04-04"}, {1.3, 3.4}, {1, 10}}
auto df_2 = Dataframe<std::string, int, double>(input); // Can also handle this
df_2.Data(); //expected output: {{"2024-03-03", "2024-04-04"}, {1, 3}, {1.0, 10.0}}
我正在尝试创建一个具有动态类型签名的数据帧类来处理多种数据类型。我是模板(以及一般的 C++)新手。我正在尝试创建一个类似于 pandas dataframe 的类,这样我就可以通过列获取平均值、滚动平均值等。
std::vector<std::tuple<Types...>> data_;
会更好?Dataframe<std::string, int, double>
的长度可能会有所不同,我如何创建 std::vector<std::vector<std::variant<Types...>>> data_
所以当我循环 input
时,我可以执行如下操作,但如何在这里考虑类型?for (std::size_t i = 0; i < input.size(); ++i) {
for (std::size_t j = 0; j < input[i].size(); ++j) {
data_[i].push_back(input[i][j]);
}
}
不是模板方面的专家,并且不断出错。
也许是这样的:
Dataframe(const std::vector<std::vector<std::string>>& input) {
for (const auto& v : input) {
data_.emplace_back(v.begin(), v.end());
}
}