免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4114 | 回复: 5
打印 上一主题 下一主题

[C++] std::set_intersection 出错,半天没搞懂,应该就是个小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-24 15:45 |只看该作者 |倒序浏览
本帖最后由 sytpb 于 2015-12-24 17:51 编辑

#include "stdafx.h"
#include <set>
#include <algorithm>

namespace Trade{

        typedef struct _HandiCap
        {
                long price;
                long qty;
                struct _HandiCap(long p):price(p){qty=0;}
                struct _HandiCap(long p,long q):price(p),qty(q){}

                struct _HandiCap& operator=(const struct _HandiCap& rhs){
                        if(this == &rhs)
                                return *this;
                        price = rhs.price;
                        qty = rhs.qty;
                        return *this;
                }
                bool operator<(struct _HandiCap const& rhs)const{
                        return price < rhs.price;
                }

        }*PHandiCap,HandiCap;
}

void test()
{
        std::set<Trade::HandiCap> cap1,cap2;

        cap1.insert(Trade::HandiCap(1,1));
        cap1.insert(Trade::HandiCap(2,2));
        cap1.insert(Trade::HandiCap(3,3));

        cap2.insert(Trade::HandiCap(1,1));
        cap2.insert(Trade::HandiCap(2,2));
        cap2.insert(Trade::HandiCap(3,3));

        std::set<Trade::HandiCap> cap3(cap1);

        std::set_intersection(cap2.begin(),cap2.end(),cap1.begin(),cap1.end(),cap3.begin());      //此行报错, 求cap1,cap2交集
}


没搞明白,求教一下。

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(4494): error C2678: 二进制“=”: 没有找到接受“const Trade::_HandiCap”类型的左操作数的运算符(或没有可接受的转换)
1>          d:\work\svn\simulation\tradingproject\apex_adapter\trade_center.h(5: 可能是“Trade::_HandiCap &Trade::_HandiCap:perator =(const Trade::_HandiCap &
1>          尝试匹配参数列表“(const Trade::_HandiCap, const Trade::_HandiCap)”时
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(4522): 参见对正在编译的函数 模板 实例化“_OutIt std::_Set_intersection<_InIt1,_InIt2,_OutIt>(_InIt1,_InIt1,_InIt2,_InIt2,_OutIt)”的引用
1>          with
1>          [
1>              _OutIt=std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<Trade::HandiCap,std::less<Trade::HandiCap>,std::allocator<Trade::HandiCap>,false>>>,
1>              _InIt1=std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Trade::HandiCap,std::less<Trade::HandiCap>,std::allocator<Trade::HandiCap>,false>>>,
1>              _InIt2=std::_Tree_unchecked_const_iterator<std::_Tree_val<std::_Tset_traits<Trade::HandiCap,std::less<Trade::HandiCap>,std::allocator<Trade::HandiCap>,false>>>

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
2 [报告]
发表于 2015-12-24 16:04 |只看该作者
Trade在哪儿?

论坛徽章:
0
3 [报告]
发表于 2015-12-24 16:13 |只看该作者
回复 2# windoze


    少拷这个命名空间,我重新更新。如上。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2015-12-25 08:42 |只看该作者
将 cap3.begin()
改为 std::inserter( cap3, cap3.end() )
试试看

我知道为什么错,但不知道怎么改

论坛徽章:
0
5 [报告]
发表于 2015-12-25 09:36 |只看该作者
怎么得到 set_intersection 结果的个数?

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
6 [报告]
发表于 2015-12-26 23:01 |只看该作者
set_intersection的第5个参数应该是一个output iterator,set::begin返回的是一个bidirection iterator,而bidirection iterator不是output iterator,所以会报错。
你的代码比如说改成这样就行了:

  1. std::vector<Trade::HandiCap> cap3;
  2. std::set_intersection(cap2.begin(),cap2.end(),cap1.begin(),cap1.end(),std::back_inserter(cap3));
复制代码
注意输出没法用std:set,因为set没有push_back,所以不能做back insertion

评分

参与人数 1信誉积分 +10 收起 理由
dorodaloo + 10 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP