草庐IT

boost-unordered

全部标签

c++ - boost::unordered_map -- 需要指定自定义哈希函数来散列 std::set<int> 吗?

我想使用boost::unordered_map,其中key是std::set.由于一组整数不是内置类型,我假设我必须提供我自己的散列函数(或者,更确切地说,我正在考虑使用boost'shash_range)。但是,现在我尝试像这样初始化散列映射,既不提供散列函数也不提供相等谓词——而且gcc没有提示。这里发生了什么?boost是否足够聪明,可以自行散列所有STL容器?这会比我使用自定义哈希函数慢吗?使用boost::hash_range怎么样??提前致谢。 最佳答案 根据theBoostdocumentation:thedefau

c++ - 在 boost::asio 程序中刷新缓冲区

基本上我正在使用boost套接字库编写一个简单的程序...我有两个程序,一个客户端和一个服务器。服务器等待来自客户端的连接,当它找到一个连接时,客户端向服务器发送一条消息,服务器打印出来,这在客户端第一次查询服务器时有效,但过了一会儿,一个奇怪的模式开始让我们说我们的服务器是运行,我通过执行两次使用了客户端程序:./clientlocalhostnamemessage./client本地主机名测试服务器的输出0f首先是:名称:消息然而接下来它会显示姓名:testage我不知道为什么会这样,但我知道这一定是服务器的问题,因为每个客户端都独立发送一个数据包,服务器只是打印出来...我认为这

c++ - unordered_map 如何导致 sigsegv

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。编辑:已解决,我知道怎么做,但我不明白为什么。我改变了variables来自的声明tr1::unordered_mapvariables;到unordered_mapvariables;它工作正常。如果您知道原因,请将其写在答案中。我有一个非常大的程序,所以我不知道应该把哪个代码放在这里。有抽象类,继承派生类。摘要有unordered_map(模板)作为私有(private)成员和公共(publ

c++ - 如何预期 static_assert 失败并使用 Boost.Test 框架处理它?

如果我有一个接受模板参数的方法,该模板参数应该可转换为base_of或与返回类型相同的类型,我应该怎么做?例如,考虑这个方法:templateclassIFoo{public:templateT*as(){static_assert(std::is_same::value||std::is_convertible::value||std::is_base_of::value,"IFoo::as()requiresServiceTtobeabaseofT");...}};现在,我想对其进行BOOST_CHECK!classA{};classB{};BOOST_AUTO_TEST_CASE

c++ - 虚函数和 boost 绑定(bind)奇怪的行为

我在Linux下写的一段代码中看到了一个奇怪的行为,我想分享一下,看看是否有人知道原因。我有一个基类和一个派生类。在基类中我定义了一个虚方法,在派生类中我重新定义了那个方法,具有相同的签名。然后我使用boostbind来启动一个线程。这是示例代码:ClassBase{public:virtualvoidDoSomething();virtualvoidInit()=0;...}ClassDerived:publicBase{public:voidDoSomething();voidInit();...}在Derived类的Init方法中我这样做了:boost::thread*t=new

c++ - unordered_set 将元素存储为指针

缩小范围:我目前正在使用Boost.Unordered.我看到两种可能的解决方案:定义我自己的EqualityPredicatesandHashFunctions并利用模板(可能是is_pointer)来区分指针和实例;简单地扩展boost::hash通过提供hash_value(Type*const&x)至于散列;并添加==运算符重载为自由函数(Type*const&x,Type*const&y)用于相等检查的参数。我不确定这两种变体是否真的可行,因为我没有测试它们。我想知道你处理这个问题。欢迎实现:)编辑1:这个呢?templatestructEquals:std::binary_

c++ - 使用 try_lock boost 锁定

我正在尝试解决Boost1.46.1的锁定问题-我尝试了一些方法但我不满意-因此很想听听干净的意见。线程A:必须始终等待并获取关键数据部分的锁更新一些关键数据手动解锁(或范围)线程B-绝不能阻塞(try_lock?)-如果获得锁,从提到的关键部分读取数据我不确定我是否需要shared_lock或者我是否可以用其他方式解决这个问题。编辑,我的代码如下:线程A:{//Criticalsectionboost::mutex::scoped_locklock(_mutex);}线程B:boost::mutex::scoped_locklock(_mutex,boost::try_to_lock

c++ 从 3 个浮点值生成 unordered_map 的键

我真的不明白:我正在读取二进制文件中的点,每个点都包含3个浮点值。将这些点保存在unordered_map中因此我尝试从这3个浮点值中创建一个键:初衷:只需使用确切的位作为key:unordered_map>points;stringvecToKey(float*a){charbytes[12];memcpy(bytes,a,12);returnstring(bytes);}关键是我绝对想用这种方式消除相同的点但是在一个示例项目中读取了大约21374点map结果大小=10640点使用以下方法作为key创建会产生正确的结果共10687点stringvec3ToKey(floata[3])

c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>

我正在尝试创建指向我的对象的指针数组的散列。散列键是对象类型的int,数组是要渲染的对象列表。我想做的是:unordered_map>drawQueue;drawQueue.clear();//newemptydrawqueuefor(...){drawQueue.at(type).push_back(my_obj);}所以我对STL东西的细微差别还不够熟悉,因为我得到一个异常,说out_of_bounds,这是当key不存在时发生的情况。所以我想我需要先创建key,然后添加到vector中:if(drawQueue.count(type)){//keyalreadyexistsdra

c++ - 我们可以创建一个已经打开的套接字的 boost 套接字吗?

我有一个代码,通过一个stunServer为我的对等软件创建一个套接字,我想知道是否有可能创建一个boost::udp::socket已经打开的套接字?我已经在boost文档中进行了搜索,但没有找到允许这样做的内容。 最佳答案 是的。io_serviceios;ip::udp::socketsocket(ios);intnative_socket=::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);socket1.assign(ip::udp::v4(),native_socket);参见thissam