`
aigo
  • 浏览: 2634962 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

vs2010中的stdext::hash_map在vs2015下的问题

C++ 
阅读更多

vs2010中的hash_map调用方式:

需要头文件<hash_map>和命令空间stdext,且需要为不同key类型定义相应的comparator

#include <hash_map>
using namespace stdext;


struct intLess : public std::binary_function<const int, const int, bool>
{
public:
    result_type operator()(const first_argument_type& _Left, const second_argument_type& _Right) const
    {
        return _Left == _Right;
    }
};

struct charLess : public std::binary_function<const char*, const char*, bool>
{
public:
    result_type operator()(const first_argument_type& _Left, const second_argument_type& _Right) const
    {
        return(_stricmp(_Left, _Right) < 0 ? true : false);
    }
};

这样就产生了一个要命的问题:hash_map的key必须为const。这个要求只有在vs2012之前版本才有;gcc我碰到的版本都没有。

 

如果你用新版本,比如vs2015,那么就会碰到这种编译错误:

Microsoft Visual Studio 14.0\VC\INCLUDE\xstddef(377): error C2338: The C++ Standard doesn't provide a hash for this type.

 

原因就是这个const不再需要了,另外C++11已经添加了std::unordered_map,且不需要自己实现了comparator,使用起来比旧版的hash_map更方便。微软设计一些反人类的api也够坑的。

 

总结:
除了vs2010下的stdext::hash_map的key需要为const外,其他情况下的map都不需要为const,其中std::unordered_map的key必须不能为const,std::map可以为const也可以不为const。

 

 

 

分享到:
评论

相关推荐

    jdbc-stdext-2.0.jar

    在Java开发中,Maven是一个广泛使用的构建工具,它通过管理项目的依赖关系,简化了项目的构建和维护。然而,有时我们可能会遇到“missing artifacts”这样的问题,这通常意味着Maven在中央仓库找不到某个特定的依赖...

    jdbc2_0-stdext.jar

    jdbc2_0-stdext.jar jdbc2_0-stdext.jar

    JavaEE源代码 jdbc2_0-stdext

    JavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源代码 jdbc2_0-stdextJavaEE源...

    WTL for MinGW 移植版

    - **stdext**:这个目录可能包含了MSVC特有的C++标准库扩展,如`std::hash_map`和`std::hash_set`,可能需要进行适当的调整以适应GCC。 - **atlport**:通常与ATL(Active Template Library)相关,可能是为了在...

    MySQL_Driver.rar

    这个压缩包中的三个重要文件分别是jdbc2_0-stdext.jar、mysql-connector-java-3.0.16-ga-bin.jar和proxool-0.8.3.jar,它们在Java应用程序中连接和操作MySQL数据库时起着关键作用。 首先,我们来详细了解一下这三个...

    Java Cache System 应用JAR包

    Java Cache System(JCS)是一种基于Java的分布式缓存系统,设计用于提高应用程序的性能和效率,通过在内存中存储经常访问的数据来减少对数据库或其他慢速资源的依赖。JCS能够有效地缓存数据对象和页面,从而减轻...

    Struts中文手册

    - `jdbc2_0-stdext.jar`:包含JDBC 2.0 Optional Package API类。如果应用程序需要使用Struts提供的数据访问功能,则需将此文件复制到项目的`WEB-INF\lib`目录下。 ##### 1.2 Struts体系结构 - **MVC架构**: - *...

    WEB-INF下lib2.rar

    这些库文件通常位于Java Web应用程序的结构中,具体在WEB-INF目录下的lib子目录里,用于存放支持应用运行的各种JAR(Java Archive)文件。 描述中提到“和我发的netshop.rar是同一个系统”,暗示这可能是一个电子...

    Struts配置文件

    而在小型程序中,这些操作可能会直接内嵌在`Action`类中,作为控制器的一部分。 - **视图(View)**: - 使用JSP构建,Struts提供了一套扩展的自定义标记库,简化了创建完全国际化的用户界面的过程。 - **控制器...

    jdbc2000,jdbc2005

    在提供的标签中,`msbase.jar`、`mssqlserver.jar`和`jdbc2_0-stdext.jar`是特定于Microsoft SQL Server的JDBC驱动。`msbase.jar`和`mssqlserver.jar`是早期版本的SQL Server JDBC驱动组件,而`jdbc2_0-stdext.jar`...

    ssm整合中jar包作用介绍.docx

    - **用途**:虽然不是Hibernate核心必需的,但在某些特定场景下可能需要使用。 7. **jta.jar** - JTA(Java Transaction API)是Java平台提供的事务管理标准。 - **用途**:当应用需要与其他遵循JTA规范的事务...

    Struts笔记

    - **依赖库**: 在 Struts 的安装目录下的 `lib` 文件夹中包含了所需的依赖库,如 `jakarta-struts-1.0.2`。在 Web 应用项目的 `WEB-INF\lib` 目录下添加必要的 JAR 包,包括但不限于: - `jdbc2_0-stdext.jar`: ...

    strtus整体架构及核心标签库的介绍

    在部署应用时,这些文件需要被复制到WEB-INF\lib目录下。`webapps`目录则包含了一些示例应用和文档,帮助开发者了解Struts的功能。 2. **Struts 体系结构** Struts遵循MVC模式,由以下几个主要部分组成: - **...

    struts中文手册

    - **配置**:在`web.xml`文件中配置`ActionServlet`,设置初始化参数。 - **方法**:包括`doGet`、`doPost`等,用于处理不同类型的HTTP请求。 - **ActionMapping类**:表示一个具体的请求映射,定义了请求处理流程...

    Struts

    - `jdbc2_0-stdext.jar`:包含JDBC 2.0 Optional Package API类,如果应用中需要用到Struts提供的数据访问功能,则需要将此文件复制到项目的`WEB-INF\lib`目录下。 - `Struts.jar`:包含Struts框架的所有Java类,...

    struts架构的指导及小例子-2.doc

    - **jdbc2_0-stdext.jar**:包含JDBC 2.0 Optional Package API类,如果需要使用Struts提供的数据访问功能,则需将此文件复制到项目的`WEB-INF/lib`目录下。 - **Struts.jar**:包含Struts所有Java类,同样需要...

    SSH 中jar包说明

    ### SSH中的Jar包详解 SSH(Struts+Spring+Hibernate)是Java Web开发中非常流行的轻量级框架组合。为了更好地理解和使用SSH框架,我们有必要深入解析这些框架中所涉及的关键Jar包及其功能。 #### 1. **antlr-2.76...

Global site tag (gtag.js) - Google Analytics