- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的一位教授的一篇论文开发质谱数据库。这也是我在这里的第一篇文章,尽管该网站非常有帮助。
我在使用带有标志的 GNU CPP 4.8 时遇到以下错误:
CXX = g++
BOOSTDIR = /home/user/boost_1_60_0/ #Uses boost_1_60_0 lirary.
CXXFLAGS = -std=c++11 -g -ggdb -rdynamic -D_GLIBCXX_DEBUG -Wall -Wextra -I$(BOOSTDIR)
LDFLAGS = -L/home/user/boost_1_60_0/stage/lib -lboost_system -lboost_filesystem -lboost_iostreams
结果是:
/usr/include/c++/4.8/bits/stl_algo.h:2438:error: elements in iterator range
[__first, __last) are not partitioned by the predicate __comp and value
__val.
Objects involved in the operation:
iterator "__first" @ 0x0x7ffd8a308c30 {
type = N11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIP11cache_tableNSt9__cxx19986vectorIS3_SaIS3_EEEEENSt7__debug6vectorIS3_S7_EEEE (mutable iterator);
state = dereferenceable (start-of-sequence);
references sequence with type `NSt7__debug6vectorI11cache_tableSaIS1_EEE' @ 0x0x7ffd8a308c30
}
iterator "__last" @ 0x0x7ffd8a308c60 {
type = N11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIP11cache_tableNSt9__cxx19986vectorIS3_SaIS3_EEEEENSt7__debug6vectorIS3_S7_EEEE (mutable iterator);
state = past-the-end;
references sequence with type `NSt7__debug6vectorI11cache_tableSaIS1_EEE' @ 0x0x7ffd8a308c60
}
Aborted (core dumped)
这里是相关的方法调用:
void db::get_range(double mz_min, double mz_max, double rt_min, double rt_max, std::vector<dp> & ilist){
//Get valid rt ranges. //OPTIMIZE
auto rt_low = std::lower_bound(tlist.begin(), tlist.end(), rt_min, rt_less_than());
//Iterate from low end until out of range or end of list.
for(auto a = rt_low; (a != tlist.end() && (*(*a).begin()).rt_max < rt_max); a++){
//Get valid mz ranges. //OPTIMIZE
auto mz_low = std::lower_bound((*a).begin(), (*a).end(), mz_min, mz_less_than()); //This call is what is throwing the error.
for(auto b = mz_low; (b != (*a).end() && (*(*a).rbegin()).mz_max < mz_max); b++){
std::clock_t access_time = std::clock();
(*b).get(mz_min, mz_max, rt_min, rt_max, ilist, access_time);
tqueue.push(std::make_pair(&(*b), access_time));
trim();
}
}
}
下面是一些支持代码:
//Comparator to check rt ranges.
struct rt_less_than{
bool operator()(std::vector<cache_table> & p, double s) const{
return p[0].rt_max < s;
}
bool operator()(double p, std::vector<cache_table> & s) const{
return p < s[0].rt_max;
}
};
//Comparator to check mz ranges.
struct mz_less_than{
bool operator()(cache_table & p, double s) const{
return p.mz_max < s;
}
bool operator()(double p, cache_table & s) const{
return p < s.mz_max;
}
};
在我不得不重构大部分代码之前,这一切都在起作用。我对 cpp 不是最有经验的,这个错误听起来好像我没有满足该函数的某些模板要求,但是当我检查 mz_lower_than() 对象内的类名时,它似乎没问题。检查对 mz_lower_than() 的调用内部发现它会在对该测试集的大小为 99 的 vector 进行大约 90 次调用后抛出错误。
谷歌搜索这个错误发现其他一些人已经看到它但是在前 3 页之后似乎没有人真正得到答案。我感觉这是一个由非常简单的事情引起的奇异错误,但我似乎无法弄清楚它会是什么。
该程序非常大,所以我只粘贴了似乎是让您了解正在发生的事情所需的最少代码。如果需要,我当然可以粘贴更多代码。
有人可以帮我吗?谢谢!
最佳答案
您只能在按比较仿函数中使用的相同标准排序的序列上运行 lower_bound
。由于您没有在代码中显示任何 sort
,我必须假设您的数据未排序。
关于c++ - std::lower_bound 的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39360039/
似乎在 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
我是一名优秀的程序员,十分优秀!