std :: more未在MSVC2012中定义

时间:2013-05-15 14:24:06

标签: c++ visual-studio-2010 visual-c++ visual-studio-2012 stl

为什么std :: greater不再是Visual Studio 2012中std命名空间的一部分?我现在需要加入<functional>

我认为STL库在工具集中保持不变

2 个答案:

答案 0 :(得分:16)

  

为什么std :: greater不再是Visual Studio 2012中std命名空间的一部分?

如果是这样的话,我会感到非常惊讶。

  

我现在需要加入<functional.h>

不,您需要包含<functional>,因为这是定义所有标准功能对象的标头,包括greater

  

我认为STL库在工具集中保持不变

他们应该。但是标题允许包含其他标题,因此有时即使您没有包含正确的标题,也会发现某些内容可用。但你不能依赖它,正如你在这里找到的那​​样。始终包含您使用的所有标题。

答案 1 :(得分:2)

以下示例取自here,在Visual Studio 2012中为我正确编译和执行:

// greater example
#include <iostream>     // std::cout
#include <functional>   // std::greater
#include <algorithm>    // std::sort

int main () {
  int numbers[]={20,40,50,10,30};
  std::sort (numbers, numbers+5, std::greater<int>());
  for (int i=0; i<5; i++)
    std::cout << numbers[i] << ' ';
  std::cout << '\n';
  return 0;
}

输出:

  

50 40 30 20 10

根据问题评论和上面的示例,您需要包含<functional>,而不是<functional.h>