忽略set_difference向量向量中的最后一个字符串
Ignoring the Last String in Vectors of Vectors for set_difference
我当前正在使用C 中字符串向量的向量。我有一个当前的向量向量和一个向量的用户输入向量。我想删除不匹配向量的用户输入向量的向量的当前向量。截至目前,我正在使用set_difference函数模板,尽管我希望在比较中忽略向量向量中的最后一个字符串(因为它们是必要标识符,并且始终是唯一的(。有任何建议或示例吗?
以下是代码:
vector<vector<string> > curTable;
vector<vector<string> > inTable;
vector<vector<string> > difTable;
标识符(fulLeleventString(是发送到硬件的二进制字符串,这是向量向量中的示例向量:
connection = {sramChipID, sramCoreID, sramNeuronID, sramID,
camChipID, camCoreID, camNeuronID, synType, camID,
fullEventString
};
...
set_difference(curTable.begin(), curTable.end(),
inTable.begin(), inTable.end(),
inserter(difTable, difTable.begin())
);
假设:
using Lines = std::vector<std::vector<std::string>>;
Lines current = { ... }; // sorted on std::less<std::vector<std::string>>
Lines input = { ... }; // also sorted on std::less<std::vector<std::string>>
Lines difference;
而不是做
std::set_difference(current.begin(), current.end(), input.begin(), input.end(), std::back_inserter(difference));
你应该做
auto compare = [](Lines::const_reference lhs, Lines::const_reference rhs)
{
assert(lhs.size() && rhs.size())
// same as default comparison, except skiping the last element
return std::lexicographical_compare(lhs.begin(), std::prev(lhs.end()), rhs.begin(), std::prev(rhs.end()));
};
std::set_difference(current.begin(), current.end(), input.begin(), input.end(), std::back_inserter(difference), compare);
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- push_back通过自行创建的对象获取最后一个元素的向量
- 为什么最后一个推回向量的对象的字段会转移到向量的其他对象?
- "如何使用C++将字符串的第一个和最后一个索引返回到向量中?
- 你能pop_back一个向量,并且仍然使用迭代器到最后一个元素吗?
- 忽略set_difference向量向量中的最后一个字符串
- 在向量C++中查找特定的第一个和最后一个索引<float>
- 试图删除最后一个std ::向量元素时,程序会崩溃
- 为什么要指向数组或向量中最后一个元素之后的内存位置
- 向量的最后一个成员在 Rcpp 中没有给出正确的结果
- vector.back() 可以用来为向量的最后一个元素赋值吗?
- C++向量迭代器:erase() 最后一个项目崩溃
- vector::erase不会擦除所需的元素,而是从向量中擦除最后一个元素
- c++向量将所有元素存储为最后一个元素
- 使用BOOST_FOREACH时如何测试向量中的最后一个元素
- push_back获取最后一个元素的向量
- 如何从C++中向量的最后一个元素中得到一个域