- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想问你一个问题,但首先我会解释一下......
我在 vector People 中有一个结构 SPerson。
typedef struct SPERSON {
string name;
string address;
string birthcertificatenumber;
} SPerson;
std::vector<SPerson> People;
People.resize(100);
counter = 0;
有一个类是添加新人的函数
bool NewPerson(const string & name, const string & address, const string & birthcertifikatenumber)
{
SPerson sPerson;
sPerson.name = name;
sPerson.address = address;
sPerson.birthcertificatenumber = birthcertificatenumber;
People[counter] = sPerson;
counter++;
return true;
}
在这个函数中,我需要检查是否已经有一个人有相同的名字“和”地址或一个人有出生证明号码
我需要对数搜索,而不是线性搜索。
我使用了下面的 NewPerson 中的函数,它按我想要的方式工作,但是当有大量数据时,它很慢,我需要更快。我听说过 lower_bound 函数用于二进制搜索,但我不知道如何将它应用到我的案例中。你能给我一个建议吗?谢谢。
auto it = find_if(begin(People), end(People), [=] (SPerson const& f) {
return (((strcasecmp(name.c_str(), f.name.c_str()) == 0) and (strcasecmp(address.c_str(), f.address.c_str()) == 0)) or (f.birthcertifikatenumber == birthcertifikatenumber));
});
bool found = (it != end(People));
if (found == true)
{
return false;
}
@Slava:谢谢,它实际上工作得很好。
我有这些输入记录:
它按出生日期证书排序,就像这样:
按名称和地址分类如下:
很好,谢谢。现在我想通过姓名和地址或出生日期证明找到一个人,这样我就可以调用如下函数:ErasePerson("Peter", "ccc");//通过名字和地址删除这个人ErasePerson("123456");//通过出生日期证书删除此人
我想使用 O(log n),所以现在我想找到特定的人并将其删除。我不确定如何使用 lower_bound 函数。我尝试了一些事情,但没有成功。我不确定如何创建比较函数以及我的比较函数是否正确。
struct SPerson {
string name;
string address;
string birthdatecertificate;
};
std::vector<SPerson> VPeople;
std::vector<size_t> idxNameAddress;
bool People::ErasePerson(const string & name, const string & address)
{
SPerson Person;
Person.name = name;
Person.address = address;
Person.birthdatecertificate= "";
std::lower_bound(idxNameAddress.begin(), idxNameAddress.end(), Person, cmpFunction);
return false;
}
最佳答案
std::lower_bound
只能用于排序后的容器(否则,您将得到无效结果...没有警告/错误),这不是您的 std::vector
的情况。 .
最简单的方法是将您的元素存储在一个排序的容器中。像std::set
或 std::map
.然后,您的排序容器将能够使用非线性搜索算法报告对象是否已经存在。
那些容器将要求您提供比较运算符:
bool operator<(const SPERSON& left, const SPERSON& right )
{
return left.name < right.name;
}
然后做:
std::set<SPERSON> People;
使用以下方法添加元素:
if ( People.find( sPerson ) == People.end() )
People.insert( sPerson );
// else: item with same name already exists!
关于c++ - 用于比较字符串的结构 vector 的 lower_bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42959004/
似乎在 C++20 中使用与 std::lower_bound() 正常工作的相同比较仿函数不适用于 std::ranges::lower_bound() 。以下代码无法使用 Visual Studi
C++ 草案对 std::lower_bound 说: § 25.4.3.1 lower_bound [lower.bound] template ForwardIterator lower_bo
最近,在处理 C++ 编程问题时,我遇到了一些有趣的事情。我的算法使用了一个非常大的集合,并且会在其上多次使用 std::lower_bound 。然而,在提交我的解决方案之后,与我在纸上所做的数学运
在尝试自学 STL 时,我编写了以下类: class Person{ public: ... bool operator::iterator itr = lower_bound(v.b
我尝试在 C++ STL Map 中使用 lowerbound()。在我使用它之前,我通过如下程序测试它的功能: int main () { std::map mymap; std::map:
我在使用 STL lower_bound 函数时遇到一些问题。我是 C++ 的新手。我需要对 Biz 类对象的 vector 进行排序,所以我使用了这种排序: bool cmpID(const Biz
#include using namespace std; int main() { int t; cin >> t; for (int i = 0; i > n >> m; long in
我正在尝试添加 Node (struct)放入一个数组(类)中并使用 lower_bound 对其进行排序.在调试我的代码时,我意识到它停止工作: auto itr = std::lower_boun
当我解决392.Is Subsequence的问题时.在 Leetcode 上。 当我使用 lower_bound() 函数时,我无法理解我想找到最后一个元素和找不到然后返回最后一个元素之间的区别。
我有一个二维数组,我想在其中找到特定列的下界。 我如何使用 std::lower_bound 做到这一点? 最佳答案 简介 这并不像人们想象的那么难,让我们首先浏览一下适用于范围的算法函数的摘要。 每
我给了一个std::set>和一个整数 x ,我必须找到第一个元素大于或等于给定整数 x 的第一对的迭代器. 我了解到如果s是 set>和 {x, y}是一对然后我可以使用 s.lower_bound
在这里,我使用 std::lower_bound() 创建了一个二进制搜索函数。如下图。如果我传递 std::pair,这会很好地工作,但是我只想对 pair 的第一个值执行二进制搜索。我认为在 lo
我了解到 C++ 中 map 的底层数据结构是一个自平衡的二叉搜索树。由于在这些数据结构中,查找键的下限和上限有很多用处,您会认为 map lower_bound 和 upper_bound 函数将为
假设我有一个vector,其元素是int类型。如何优雅地使用std::lower_bound()查找最接近目标值的元素? 我写了如下代码: #include #include #include
从互联网上阅读,我了解到 C++ 中的 lower_bound() 方法用于返回一个指向范围 [first, last) 中的第一个元素的迭代器,该元素的值不是小于值。这意味着该函数返回刚好大于该数字
我了解到 C++ 中 map 的底层数据结构是一个自平衡的二叉搜索树。由于在这些数据结构中,查找键的下限和上限有很多用处,您会认为 map lower_bound 和 upper_bound 函数将为
我的编译器拒绝编译这个简单的代码: struct mystruct{ int x; bool operator test; auto it = std::lower_bound(tes
我想在 C++ 中的 std::set 中找到严格小于给定元素的最大元素。一些问题建议找到 lower_bound 迭代器并将其递减,即 set st; // Add elements int x;
我有一个带有成员变量 __emails 的类 PersonsDB,它应该是指向类 Person 对象的指针的排序 vector (按 Person 电子邮件排序)。我的计划是将 lower_bound
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我是一名优秀的程序员,十分优秀!