草庐IT

boost-unordered

全部标签

C++:替换我们有迭代器的 std::unordered_set 中的元素

我有一个指向某些对象的指针的std::unordered_set。该集合具有自定义哈希和等价函数,s.t.即使对象在“所有成员都相等”的意义上不相等,对象也可以关于集合是相等的。现在我想插入一个新对象。如果集合中已经存在等效对象,当且仅当对象的“其他”成员(即不属于散列/相等性检查的一部分)的某些条件为真时,我希望替换旧对象。如果我决定更换对象,我想知道如何最有效地做到这一点。我觉得整个过程应该可以通过一次HashMap查找来完成。我目前最好的方法是:首先,调用set.insert(new_object)。如果这实际上插入了对象,我们就完成了。(这需要我们进行一次HashMap查找。)

C++ Boost 1.66 使用 Beast http 请求解析器解析字符串

我没有在我的项目中使用beasthttp服务器,但我正在寻找一种解决方案来在我的程序中以std::string的形式解析http请求,是否可以使用boost/beast/http/parser.hpp在这种情况下,如果是的话,如果你在代码中给出一个例子,那就太好了。非常感谢 最佳答案 是的,这是可能的:std::strings="POST/cgi/message.phpHTTP/1.1\r\n""Content-Length:5\r\n""\r\n""abcde";error_codeec;request_parserp;p.put

c++ - 使用 Boost Beast 通过代理发出同步 http 请求时出现问题

我修改了http_sync示例以通过代理连接,我用wireshark进行了测试,问题是在我发送http连接请求后,代理返回代码200OK,我的程序无法读取,它在http::read上等待了大约1分钟,然后服务器断开了我的连接。我试过解决这个问题,只是不读取响应,但是当我尝试进行ssl握手时,我得到一个错误:未知协议(protocol)(据wireshark显示,我的ssl握手发送一个客户端问候,然后我收到完整的服务器问候,但我的程序同时发送了一个FIN并给了我错误,我认为这是因为他阅读了200OK而不是服务器的回答并且感到困惑)。所以我想我的问题是,有没有办法解决这个问题?我不明白为什

c++ - Boost beast::websocket 回调函数

我正在试验Boostbeast::websocketwebsocket_client_async.cpp例如,结合websocket_server_async.cpp.正如给定的那样,客户端示例只是建立一个连接,向服务器发送一个字符串(它只是回显),打印回复,关闭并存在。我正在尝试修改客户端以使session保持事件状态,以便我可以重复发送/接收字符串。因此,虽然示例代码的on_handshake函数会立即通过ws_.async_write(...)发送字符串,但我将其分离到它自己的write(...)函数。这是我修改过的session类:usingtcp=boost::asio::i

c++ - 如何使用 boost-range 在函数中封装自定义迭代器

最近我使用boost-range来创建满足特定条件的元素的范围。在所有情况下,我一直使用相同类型的过滤范围,因此我试图将此行为封装在外部函数中。这就是我的问题开始的地方。考虑以下示例。#include#include#includeautomyFilter=[](conststd::vector&v,intr){returnv|boost::adaptors::filtered([&r](autov){returnv%r==0;});};intmain(intargc,constchar*argv[]){usingnamespaceboost::adaptors;std::vector

C++ boost::multi_array 索引太大

我正在使用二维boost::multi_array来存储自定义结构的对象。问题是我有大量的这些对象,所以我需要的数组索引超出了整数的范围。是否有可能将long用作多数组的索引,或者您对如何存储这么大的数据集并仍然保持以适当的速度访问它有任何其他建议吗?谢谢! 最佳答案 officialdocumentation声明索引类型未指定,但查看repository,可以看到最有可能的定义是typedefstd::ptrdiff_tindex;因此,如果您为x8632位系统编译,无论如何您肯定会用完可寻址内存,因此索引大小的限制并不是您的真正

c++ - 将 Boost 参数与 operator() 一起使用

我想将BoostParameter与重载调用运算符(operator())一起使用:#include#include#includestructadd_argument_tag{structname_;structdescr_;};staticinlineboost::parameter::keyword&name=boost::parameter::keyword::get();staticinlineboost::parameter::keyword&descr=boost::parameter::keyword::get();structconfig{BOOST_PARAMETE

c++ - std::unordered_map:多线程插入?

我有一堆数据(一个巨大的0到ULLONG_MAX之间的整数列表),我想提取所有唯一值。我的方法是创建一个unordered_map,使用整数列表值作为键,使用一次性bool值作为映射值。我迭代列表并为每个键插入一次性值。最后,我迭代map以获取所有唯一键。非常简单。但是,我的列表非常大(数以亿计),我想对这个进程进行多线程处理。我知道一种天真的线程方法是行不通的,因为unordered_map插入会影响底层数据结构,因此它不是线程安全的。并且在每次插入周围添加锁会很慢,并且可能会抵消任何线程加速。然而,大概不是每次插入都会改变数据结构(只有那些不能适应现有分配桶的插入?)。有没有办法在

c++ - Boost 1.69 中的某些库是否与 MacOS 不兼容?

我正在尝试编译一个程序,我在Ubuntu18.04和Windows10上编译时没有遇到任何问题。但是,当我尝试在OSXHighSierra上编译它时,出现错误,它们只与boost有关。这是一个例子:#include#includeintmain(){std::cout然后我尝试用g++和clang编译程序,如下所示:g++-std=c++11test.cpp-lpthread然后我得到了这个巨大的错误:Infileincludedfromtest.cpp:1:Infileincludedfrom/usr/local/include/boost/process.hpp:24:Infile

python - Cmake 找不到 boost_python

我正在尝试从thislink构建这个简单的boostpython演示在我的MacOSHighSierra上。以下是hello_ext.cpp:#includecharconst*greet(){return"hello,world";}BOOST_PYTHON_MODULE(hello_ext){usingnamespaceboost::python;def("greet",greet);}以下是CmakeLists.txt:cmake_minimum_required(VERSION3.5)#FindpythonandBoost-botharerequireddependencies