C++ 带std::ranges的过滤器向量
我希望从收集的数据向量(每个数据都有一个时间戳)中只获取比指定时间更新的元素C++ 带std::ranges的过滤器向量,c++,algorithm,filter,view,range,C++,Algorithm,Filter,View,Range,我希望从收集的数据向量(每个数据都有一个时间戳)中只获取比指定时间更新的元素savedPublishedData是我查找id的映射。savedPublishedData。second是数据向量(自定义类),每个数据都有一个时间戳 std::vector<PublisherData>& DataModel::getSavedPublishedData(const unsigned int id, seconds newerThan) { auto dataIterato
savedPublishedData
是我查找id的映射。savedPublishedData。second
是数据向量(自定义类),每个数据都有一个时间戳
std::vector<PublisherData>&
DataModel::getSavedPublishedData(const unsigned int id, seconds newerThan)
{
auto dataIterator = savedPublishedData.find(id);
if (dataIterator == savedPublishedData.end()) {
return; //type?
}
auto timeNow = system_clock::now();
std::vector<PublisherData>& dataRawRef = dataIterator->second;
auto is_newer = [&timeNow, &newerThan](const PublisherData& pD) ->bool
{
return (pD.getTimeGenerated() + newerThan) > timeNow;
};
auto dataIsNewer = dataRawRef | std::views::filter(is_newer);
return dataIsNewer; //How to return the view?
}
std::vector&
数据模型::getSavedPublishedData(常量unsigned int-id,秒数newerThan)
{
自动数据迭代器=savedPublishedData.find(id);
if(dataIterator==savedPublishedData.end()){
return;//类型?
}
自动计时现在=系统时钟::现在();
std::vector&dataRawRef=dataIterator->second;
自动更新=[&timeNow,&newerThan](const PublisherData&pD)->bool
{
return(pD.getTimeGenerated()+newerThan)>timeNow;
};
auto dataIsNewer=dataRawRef | std::views::filter(较新);
return dataIsNewer;//如何返回视图?
}
我的编译器无法确定
dataIsNewer
()的类型,因此我不知道如何正确返回找到的值。视图不是向量,可以返回auto
,或者将范围的副本创建到向量中(并按值返回,而不是按引用返回)。我尝试(为了避免复制)返回一个在filterd vectorType视图上进行迭代的视图迭代器是“复杂的”,因此使用auto
会更简单。我以前尝试过这个方法,但在这种情况下auto不起作用(编译器错误:“return type”:所有返回表达式必须推断为相同的类型:以前是“return type”)。视图不是向量<代码>返回std::vector(dataIsNewer.begin(),dataIsNewer.end())但是如果是这样,返回类型不应该是ref类型。