欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求教为何输出是3

更新时间: 2015-03-03 14:38:55 责任编辑: Author_N10

 

求教为什么输出是3
C/C++ code

#include <vector>
#include <set>
#include <cstdio>

int numbers[10] = {1,2,3,2};

struct CMP{
  bool operator() (std::vector<int>* const p1, std::vector<int>* const p2) const{
    const std::vector<int> &v1 = *p1, &v2 = *p2;
    bool flag = false;
    for (int i = 0; i < v1.size() && !flag; ++i)
      if (numbers[v1[i]] != numbers[v2[i]]) flag = true;
    if (!flag) return false;
    for (int i = 0; i < v1.size(); ++i)
      if (v1[i] != v2[i]) return v1[i] < v2[i];    
    return false;
  }
};

int main(){
  std::vector<int> v1, v2, v3;
  v1.push_back(1);
  v2.push_back(2);
  v3.push_back(3);
  std::set<std::vector<int>*,CMP> set;
  set.insert(&v1);
  set.insert(&v2);
  set.insert(&v3);
  printf("%d\n", set.size());
  
  return 0;
}



g++ 4.7.1编译。为什么输出是3不是2呢?

--参考方法--
set的比较函数,是要定义出严格弱序来。你这写得比较复杂……
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2015-03-03 14:38:55
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/1162750/
本文WWW.DOC100.NET DOC100.NET版权所有。