Maison  >  Article  >  développement back-end  >  Comment charger et analyser de grands ensembles de données à l'aide de STL en C++ ?

Comment charger et analyser de grands ensembles de données à l'aide de STL en C++ ?

WBOY
WBOYoriginal
2024-06-01 21:18:59997parcourir

Comment charger et analyser de grands ensembles de données à l'aide de STL ? Utilisez std::ifstream pour charger des fichiers de données. Pour les fichiers CSV, utilisez std::getline() pour lire les données ligne par ligne. Divisez chaque ligne en utilisant std::stringstream et std::getline() pour obtenir les champs. Stockez les champs analysés dans une structure de données telle que std::unordered_map. Utilisez les données analysées pour un traitement ultérieur.

如何在 C++ 中使用 STL 加载和解析大型数据集?

Comment charger et analyser de grands ensembles de données à l'aide de STL en C++

STL (Standard Template Library) fournit aux programmeurs C++ des outils puissants pour gérer et traiter diverses structures de données. Dans cet article, nous verrons comment utiliser STL pour charger et analyser de grands ensembles de données.

Chargement d'un ensemble de données

La première étape du chargement d'un ensemble de données consiste à ouvrir le fichier à l'aide de std::ifstream : std::ifstream 打开文件:

std::ifstream input("data.csv");

对于大型数据集,可以考虑使用内存映射文件技巧来提高性能。这可以通过使用 std::memfd_create()std::mmap() 函数实现。

解析数据集

数据集加载后,下一步是解析它。对于 CSV 文件,我们可以使用 std::getline() 来逐行读取数据。然后,我们可以将每一行分割成单独的字段,使用 std::stringstreamstd::getline()

std::string line;
while (std::getline(input, line)) {
  std::stringstream ss(line);
  std::string field;
  std::vector<std::string> fields;
  while (std::getline(ss, field, ',')) {
    fields.push_back(field);
  }
  // 处理已解析的字段
}

实战案例:解析销售数据集

假设我们有一个大型 CSV 文件,其中包含以下格式的销售数据:

product_id,product_name,quantity_sold,price
1,iPhone 13 Pro,100,999
2,Apple Watch Series 7,50,399
3,MacBook Air M2,75,1299

我们可以使用 STL 加载和解析此数据集:

std::ifstream input("sales.csv");
std::unordered_map<int, std::pair<std::string, int>> sales;
std::string line;
while (std::getline(input, line)) {
  std::stringstream ss(line);
  int product_id;
  std::string product_name;
  int quantity_sold;
  float price;
  std::getline(ss, product_id, ',');
  std::getline(ss, product_name, ',');
  std::getline(ss, quantity_sold, ',');
  std::getline(ss, price, ',');
  sales[product_id] = {product_name, quantity_sold};
}

// 使用已解析的数据

结论

STL 提供了高效、方便的工具,用于加载和解析各种数据结构,包括大型数据集。通过使用 std::ifstream 加载文件和 std::stringstreamrrreee

Pour les grands ensembles de données, envisagez d'utiliser l'astuce du fichier mappé en mémoire pour améliorer performance . Ceci peut être réalisé en utilisant les fonctions std::memfd_create() et std::mmap(). 🎜🎜🎜Analyser l'ensemble de données 🎜🎜🎜Une fois l'ensemble de données chargé, l'étape suivante consiste à l'analyser. Pour les fichiers CSV, nous pouvons utiliser std::getline() pour lire les données ligne par ligne. Nous pouvons ensuite diviser chaque ligne en champs distincts en utilisant std::stringstream et std::getline() : 🎜rrreee🎜🎜Exemple pratique : analyse d'un ensemble de données de vente 🎜🎜🎜 Supposons que nous ayons un gros fichier CSV contenant des données de ventes au format suivant : 🎜rrreee🎜 Nous pouvons charger et analyser cet ensemble de données à l'aide de STL : 🎜rrreee🎜🎜Conclusion🎜🎜🎜STL fournit des outils efficaces et pratiques, utilisés pour charger et analyser un variété de structures de données, y compris de grands ensembles de données. Nous pouvons facilement traiter l'ensemble de données en utilisant std::ifstream pour charger le fichier et std::stringstream pour analyser les données. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn