【发布时间】:2022-12-19 14:35:56
【问题描述】:
我想批准以下代码,该代码检查是否首次出现了一系列唯一字符:
bool hasOnlyUniqueElements( auto& data ) {
std::unordered_set<char> set;
for( auto& value : data )
set.emplace( value );
return set.size() == data.size();
}
int64_t getStartPacketMarker( const std::string& data, int64_t markerSize ) {
for( int64_t i = 0; i < data.size() - markerSize; i++ )
{
std::string_view packet( data.begin() + i, data.begin() + i + markerSize );
if( hasOnlyUniqueElements( packet ) )
return i + markerSize;
}
return -1;
}
我想出了以下,它使用范围但只是稍微好一点:
int64_t getStartPacketMarker( const std::string& data, int64_t markerSize ) {
int64_t idx = 0;
for( auto packet : data | ranges::views::sliding( markerSize ) ) {
if( hasOnlyUniqueElements( packet ) )
return idx + markerSize;
idx++;
}
return -1;
}
这应该是一个简单的查找操作,但我无法使其工作,也找不到在视图上使用查找的任何示例。是否可以在视图上使用查找?
【问题讨论】: