Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带std::ranges的过滤器向量_C++_Algorithm_Filter_View_Range - Fatal编程技术网

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类型。