You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合std::views::split与std::ranges::count统计拆分后的匹配元素?

问题原因

std::views::split返回的是由子范围构成的范围,每个元素都是对应拆分片段的字符子range,而非std::string类型。std::ranges::count要求被统计元素与第二个参数的类型能直接用==比较,但子range和std::string之间没有默认的相等比较逻辑,因此编译器找不到匹配的调用运算符,报出C3889错误。另外你代码里的std::range::count是笔误,正确写法是std::ranges::count。

解决方案

无需将拆分结果存入容器,直接用std::ranges::count_if配合std::ranges::equal实现统计:

#include <string>
#include <ranges>
#include <algorithm>

std::string setting;
std::string extension;

const auto count = std::ranges::count_if(
    setting | std::views::split(' '),
    [&extension](const auto& subrange) {
        // 直接比较子range的字符序列与extension是否完全一致
        return std::ranges::equal(subrange, extension);
    }
);

说明

  • std::ranges::count_if会遍历拆分后的每个子range,通过传入的谓词判断是否匹配
  • std::ranges::equal可以直接比较两个字符范围的内容是否完全相同,不需要将子range转换为std::string
  • 整个过程基于视图的延迟计算,不会额外分配内存存储拆分后的片段

内容的提问来源于stack exchange,提问作者Holt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:40:58