Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1466717
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类: C/C++

2010-01-16 18:14:38

1.编译不通过的例子

#pragma once
#include <vector>
#include <algorithm>

int main(int arg,char * argv[])
{
    std::string str;
    std::vector<std::string> strVec;
    str = "AAAAAA";strVec.push_back(str);
    str = "CCCCC";strVec.push_back(str);
    str = "CDSWF";strVec.push_back(str);
    str = "ASCEDC";strVec.push_back(str);
    str = "SCDFV";strVec.push_back(str);
    str = "SCDDDC";strVec.push_back(str);
    str = "ADWSC";strVec.push_back(str);
    str = "ASCECSD";strVec.push_back(str);
    std::sort(strVec.begin(),strVec.end());
    return 0;
}

出现相应的编译错误:
也就是出现了相应的歧义
2.初步的解决方法
定义相应的谓词函数

#pragma once
#include <vector>
#include <algorithm>

bool CompareString(const std::string & str1,const std::string & str2)
{
    if(str1.compare(str2) < 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}


int main(int arg,char * argv[])
{
    std::string str;
    std::vector<std::string> strVec;
    str = "AAAAAA";strVec.push_back(str);
    str = "CCCCC";strVec.push_back(str);    
    str = "CDSWF";strVec.push_back(str);    
    str = "ASCEDC";strVec.push_back(str);    
    str = "SCDFV";strVec.push_back(str);    
    str = "SCDDDC";strVec.push_back(str);    
    str = "ADWSC";strVec.push_back(str);    
    str = "ASCECSD";strVec.push_back(str);
    std::sort(strVec.begin(),strVec.end(),CompareString);
    return 0;
}

这样就好了,如果还不好的话,有两种解决方法:
3.进一步的解决方法
1.将
std::sort(strVec.begin(),strVec.end(),CompareString);替换为std::sort(strVec.begin(),strVec.end(),(bool(*)(const std::string &,const std::string &)) &CompareString);
将函数的指针转化为特定的类型
2.或者包装这个函数(函数对象)

#pragma once
#include <vector>
#include <algorithm>
bool CompareString(const std::string & str1,const std::string & str2)
{
    if(str1.compare(str2) < 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
template <class T>
struct wrap
{
    bool operator()(const T & t1, const T& t2) {
        return CompareString(t1,t2);
    }
};

int main(int arg,char * argv[])
{
    std::string str;
    std::vector<std::string> strVec;
    str = "AAAAAA";strVec.push_back(str);
    str = "CCCCC";strVec.push_back(str);    
    str = "CDSWF";strVec.push_back(str);    
    str = "ASCEDC";strVec.push_back(str);    
    str = "SCDFV";strVec.push_back(str);    
    str = "SCDDDC";strVec.push_back(str);    
    str = "ADWSC";strVec.push_back(str);    
    str = "ASCECSD";strVec.push_back(str);
    std::sort(strVec.begin(),strVec.end(),wrap());
    return 0;
}

这样就行了。
阅读(2256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~