免费注册 查看新帖 |

Chinaunix

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

[C++] 关于关联容器关系运算的困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-30 14:04 |只看该作者 |倒序浏览
小弟初学C++,看到关联容器的章节,讲到pair类型,对关系运算的定义有些糊涂,求大侠解释。

比如pair<T1, T2> p1;
     pair<T1, T2> p2;
     若p1 < p2为真,则 p1.first < p2.first或者 !(p2.first < p1.first) && p1.second < p2.second.

    小弟疑惑的是后面到底是什么意思。!(p2.first < p1.first)的意思不就是p1.first <= p2.first吗,这和前半段的定义岂不是重复了啊?

论坛徽章:
0
2 [报告]
发表于 2013-05-30 14:18 |只看该作者
自己顶一下。大家随便给点提示呗,我自己看着比较迷糊。


   

论坛徽章:
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
3 [报告]
发表于 2013-05-30 15:53 |只看该作者
先比较T1,如果相同的话再比较T2


如果 p1.first < p2.first 则返回 true
如果 p1.first==p2.first 则返回 p2.second<p2.second

其中必须增加一个操作符==,有点SB,所以用 !(a<b) && !(b<a) 来完成 == 的功能,即
如果 p1.first < p2.first 则返回 true
如果 !(p1.first<p2.first) && !(p2.first<p1.first) 则返回 p2.second<p2.second

简化为
如果 p1.first < p2.first 则返回 true
否则如果 !(p2.first<p1.first) 则返回 p2.second<p2.second

论坛徽章:
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 [报告]
发表于 2013-05-30 15:54 |只看该作者
上面写错了一点点,把所有“p2.second<p2.second”改为“p1.second<p2.second”

论坛徽章:
0
5 [报告]
发表于 2013-05-30 16:12 |只看该作者
谢谢大侠,你这么解释我一下子就明白了。学习C++不是很久,所以一下子还想不到这种做法是为了避免使用==。回复 3# bruceteen


   

论坛徽章:
0
6 [报告]
发表于 2013-05-30 16:33 |只看该作者
小弟还有个问题困惑了许久,是关于输入输出流的。比如:
vector<string> story;     //我想对这个story输入一些单词
string word;
while (cin >> word) {
    story.push_back(word);
}

cin.clear();

string search_word;
cin >> search_word;
for (auto &i : story) {
    if (i == search_word) {
        cout << "one match word found!" << endl;
    }
}

当我依次输入word到story后想结束却没法结束了。因为wors是string类型,不关我输入字符串还是数字他都继续等待输入,我只有使用Control + Z来结束输入,这样的话整个程序就结束了,没法执行后面的代码,请问是否有办法不使用形如
while (cin >> word && word != "q")
的判断语句而结束输入。回复 4# bruceteen


   

论坛徽章:
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
7 [报告]
发表于 2013-05-31 08:31 |只看该作者
回复 6# StoneAMG
可以的,我用ming4.7.2,输入输出如下
  1. a
  2. b
  3. ^Z
  4. a
  5. one match word found!
复制代码
如果是linux,输入完成就不是ctrl+z,而是ctrl+d
这些是操作平台定义的东西,和C/C++无关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP