gpt4 book ai didi

c++:访问字符串映射的元素和 boost 循环缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:45 28 4
gpt4 key购买 nike

我正在编写一个程序,将城市名称的文本文件读取到一个 vector 中,然后使用 STL::map 将每个城市与一个 boost 循环缓冲区相关联。我还有一个温度数据 vector ,在从另一个文本文件中将其作为字符串读取后,我将其转换为 double 类型。我想知道如何将这些数据输入到我选择的循环缓冲区中。比如温度数据是波士顿的,所以我想把它放到与波士顿关联的循环缓冲区中。如果有人可以告诉我如何做到这一点,我将非常感激!这是我的代码。与 map 有关的代码在底部附近。

#include < map >
#include < algorithm >
#include < cstdlib >
#include < fstream >
#include < iostream >
#include < iterator >
#include < stdexcept >
#include < string >
#include < sstream >
#include < vector >
#include < utility >
#include < boost/circular_buffer.hpp >

double StrToDouble(std::string const& s) // a function to convert string vectors to double.
{
std::istringstream iss(s);
double value;

if (!(iss >> value)) throw std::runtime_error("invalid double");

return value;
}

using namespace std;

int main()
{

std::fstream fileone("tempdata.txt"); // reading the temperature data into a vector.

std::string x;

vector<string> datastring (0);

while (getline(fileone, x))
{
datastring.push_back(x);
}

vector<double>datadouble;

std::transform(datastring.begin(), datastring.end(), std::back_inserter(datadouble), StrToDouble); // converting it to double using the function



std::fstream filetwo("cities.txt"); // reading the cities into a vector.

std::string y;

vector<string> cities (0);

while (getline(filetwo, y))
{
cities.push_back(y);
}

map<string,boost::circular_buffer<double>*> cities_and_temps; // creating a map to associate each city with a circular buffer.

for (unsigned int i = 0; i < cities.size(); i++)
{
cities_and_temps.insert(make_pair(cities.at(i), new boost::circular_buffer<double>(32)));
}

return 0;
}

最佳答案

你可以用一对迭代器初始化一个 circular_buffer,像这样:

std::vector<double> v;
...
... // Fill v with data
...

boost::circular_buffer<double> cb(v.begin(), v.end());

我不确定您希望如何在您的特定情况下应用它。你只有一个 double vector ,但我不知道有多少个城市。如果你想将整个数据插入循环缓冲区,你有它的方式,它会是这样的:

cities_and_temps.insert(make_pair(
cities.at(i),
new boost::circular_buffer<double>(datadouble.begin(), datadouble.end())));

关于c++:访问字符串映射的元素和 boost 循环缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765735/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com