草庐IT

c++ - std::priority_queue<> 什么时候进行 self 排序?

我想知道什么时候C++STLpriority_queue自行排序。我的意思是它insert当你push中的项目,或者当你peek时,它会自行排序并给你最高优先级的项目吗?或pop出来?我问这个是因为我的priority_queue将包含一个可能有值更新的数组的索引,我希望它在我执行pq.top();时更新.#include#include#includeusingnamespacestd;intmain(){priority_queuepq;pq.push(2);pq.push(5);//isthefirstelement5now?orwillitupdateagainwhenItop

c++ - std::map.insert "could not deduce template argument for..."

我正在尝试熟悉STL库,但我无法理解我的编译错误。我使用编译器错误字符串“无法推断...的模板参数”搜索了其他问题,但没有一个答案似乎适用或相关。Error4errorC2784:'boolstd::operator&,conststd::unique_ptr&)':couldnotdeducetemplateargumentfor'conststd::unique_ptr&'from'conststd::string'c:\programfiles(x86)\microsoftvisualstudio10.0\vc\include\xfunctional125我正在编写一个简单的解释

c++ - 在 unordered_set 中插入一个新元素 : should the hint be end()?

如果我确定某个值还没有进入unordered_set,并且我要插入这样的值,传递这个集合end()是否正确>迭代器作为提示?编辑:代码:#includeusingnamespacestd;unordered_setsomeset;intmain(){autoit=someset.find(0);if(it==someset.end())someset.insert(it,0);//correct?possibleperformanceboostifthesetisactuallypopulated?} 最佳答案 我想,你可以简单地调

c++ - Functor 的实例变量在对 generate_n 的连续调用之间不保留

我使用以下结构作为STL的generate_n算法的输入:structGenerateNumber{GenerateNumber():i(0){}intoperator()(void){returni++;}private:inti;};使用这个仿函数的代码示例是:std::vectorv1(3);std::vectorv2(3);GenerateNumbergenerateNumber;std::generate_n(v1.begin(),3,generateNumber);std::generate_n(v2.begin(),3,generateNumber);然而,结果是v1和v

c++ - 我是在用这个微不足道的方法调用转发类重新发明轮子吗?

我刚刚发现自己创建了一个类templatestructinvoker{voidoperator()(T&it)const{it();}};所以我可以通过invoker到想要调用invoker::operator()(foo&)的东西(不在我的控制之下)反复使用不同的foo实例,让它将这些调用转发给foo的foo::operator()()方法。我知道它只有几行,但这似乎是STL的函数式或boost::bind可能已经提供的那种东西不知何故。除了我看不到诀窍,如果有的话。(我确定我不是第一个使用非常类似的东西的人;它有名字吗?) 最佳答案

c++ - 在 C++11 中有一个基于反范围的 for 吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++11reverserange-basedfor-loopC++11中是否有基于反范围的for?我想做这样的事情:for(intvalue:vec){cout为此:for(autoit=vec.rbegin();it!=vec.rend();++it){cout例如:for(intvalue:-vec){cout是否可以做类似的事情来做一个反向循环?

c++ - 是否可以使用包含 boost::variant 的 STL 容器并在变体类型本身中使用相同的容器类型?

这似乎是不可能的,但我还是想问问。我定义了一个boost::variant像这样:typedefboost::variantConfigVariant;稍后在我的代码中我定义了一个std::map像这样:std::mapmy_map;现在我希望能够拥有std::map里面的值my_map.例如,我想这样做:my_map[key1][key2]="helloworld";我认为这是不可能的原因是因为相应的变体定义看起来像这样:typedefboost::variantConfigVariant;既然不可能进行这样的类型定义,那么有什么办法可以解决这个问题吗?

c++ - 我们可以在一个 STL 列表中保存 2 种数据类型吗?

我希望我的列表包含一个整数值和一个字符串值。这可能吗?我正在使用只能存储整数的STL列表实现哈希表。我正在散列一个字符串以获取我存储整数的索引。现在我希望我的字符串也与整数一起存储。编辑1:所以我正在使用这个声明:list>table[127];这是我得到的错误:>>'应该是>>'在嵌套的模板参数列表中好的,我解决了这个问题。看来我没有在“>>”中放置一个空格,所以现在解决了下一个问题如何将我的对添加到表格数组? 最佳答案 你可以有一个列表std::pairs或者,使用c++11,std::tuple,例如:std::list>li

c++ - STL - 为什么对迭代器使用范围解析运算符

要访问STL迭代器,为什么我需要范围解析运算符而不是点运算符?是因为迭代器是静态的,不属于特定的类实例吗?vector::iteratormy_iterator;而不是vectornumbers;numbers.iterator; 最佳答案 点和箭头(->)运算符用于访问特定于给定实例的所有数据(成员变量、函数)。范围解析运算符用于访问特定于给定类型而非实例的所有数据(静态成员变量、静态函数、类型)。请注意,成员类型永远不会特定于实例,因此您将始终使用type::member_type来访问它们。

C++使用相同的代码循环遍历对象和指针

所以我有两个容器setvector是否有任何方法可以修改以下转换lambda代码,以便可以使用任一容器?transform(container.begin(),container.end(),back_inserter(data),[](constPerson*p){returnPairResults(p->getTime(),p->getName());});现在我只能让它在vector上工作。谢谢。>>SolutionCodeHere非常感谢安德鲁在这方面的帮助! 最佳答案 您可以使用函数重载的小技巧来实现:定义两个函数来生成指