从std :: set合并相邻条目
Merging adjacent entries from a std::set
我有一个stl集,其中包含根据自定义谓词排序的特殊字符串元素。每个字符串使用其水平位置(不是文本)来订购自己。我试图通过将单个字符串对象合并在一起,通过将端到头结合在一起的字符串合并在一起。到目前为止,我设法找到了这些相邻的集元素
我需要通过此std::set<type>
复制非相邻元素,然后使用指定的谓词合并相邻元素(请参见下面的lambda)。有人可以帮助我获取细节。
这是我用来构建这些特殊 VCDUText
元素的集合订购比较器(基本上是带有x,y和一些额外属性的字符串)。比较器基本上根据文本从屏幕上订购了文本,带有MAXCOL
列。
static const auto gPositionComp =
[](const VCDUText& lhs, const VCDUText& rhs) -> bool {
auto lhsPos = lhs.mY * MAXCOL + lhs.mX;
auto rhsPos = rhs.mY * MAXCOL + rhs.mX;
return lhsPos < rhsPos;
};
removedText
在下面初始化(未显示)。我遇到麻烦的地方以某种方式试图将元素从removedText
复制到tempResult
,同时合并相邻条目。注意所有元素可能相邻,在这种情况下,结果应仅包含1个元素,包含合并的字符串。
std::set<VCDUText, decltype(gPositionComp)> removedText(gPositionComp);
// initialized here ...
//....
// transform removed entries to spaces
std::set<VCDUText, decltype(gPositionComp)> tempResult (gPositionComp);
std::for_each(removedText.cbegin(), removedText.cend(),
[&tempResult](const VCDUText& rNext) {
tempResult.emplace(rNext.mText, WHITE, BIG_CHAR, NONE, rNext.mX, rNext.mY);
});
auto adjIter = std::adjacent_find(tempResult.cbegin(), tempResult.cend(),
[](const VCDUText& lhs, const VCDUText& rhs){
if (lhs.mX + lhs.mText.size() == rhs.mX) {
return true;
}
return false;
});
std::set<VCDUText, decltype(gPositionComp)> temp1 (gPositionComp);
while (adjIter != tempResult.cend()) {
// HELP NEEDED HERE HOW DO I MERGE THE ADJACENT ELEMENTS
}
沿这些行(未测试,甚至没有编译):
if (removedText.empty()) return;
std::set<VCDUText, decltype(gPositionComp)> tempResult(gPositionComp);
auto current = removedText.cbegin();
VCDUText accum = *current++;
while (current != removedText.end()) {
if (accum.mX + accum.mText.size() == current->mX) {
accum.mText += current->mText;
} else {
tempResult.emplace(accum.mText, WHITE, BIG_CHAR, NONE, accum.mX, accum.mY);
accum = *current;
}
++current;
}
tempResult.emplace(accum.mText, WHITE, BIG_CHAR, NONE, accum.mX, accum.mY);
相关文章:
- 在声明中合并两个常量"std::set"(不是在运行时)
- 如何通过通用引用或std::forward将这三个c++模板函数合并为一个
- 合并常量和非常量 std::list 的模板专用化
- 就地合并,类似于 std::vector 中的元素
- std :: out_of_range异常在C 合并排序实现中
- 从std :: set合并相邻条目
- C MPI:STD ::在数组上合并
- 为什么编译器不合并冗余的 std::atomic writes?
- 如何将多个字符读取合并为std::向量
- 使用 STL std::merge() 将向量的两个部分合并到另一个向量中
- 合并排序 std:string 中的字符
- 如何合并2个std::映射,并在第三个映射中输出结果
- 在std::list中合并(将两个项目融合在一起,用融合替换)项目的算法(即破坏性聚类)
- 合并两个std::集
- 在c++中将两个相关的std::堆栈合并为std::map的计算效率如何?
- std::独特的合并
- 在抛出"std::bad_alloc"实例后调用的合并映射终止
- 是否有std::vector的后代可以合并和排序?
- 算法:合并std::unordered_maps
- 将std::sets合并为std::vector