Practice6_3_map_sort


该程序实现了学生信息到学生成绩的映射,且当map容器的key为结构体时要自己动手重载operator<才行,因为map是排序的,

对于int型默认就行了,但对于结构体map是不知道如何排序的,所以要自己手重载operator<,否则会编译不过。

该程序以重载结构体的operator<操作符实现,下一个程序,单独实现一个比较器,作为map的第三个参数。

经过前面的vector容器练习之后,这些道理和用法都是一样一样的。

// Practice6_map.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <map>
#include <string>
#include <iostream>

using namespace std;

/* map和其他容器一样,默认是less<>升序排序的,这对key为整型时默认就行了,
但map的key是结构体的时候就需要自己写operator了,否则会编译不过*/
typedef struct tagStudentInfo
{
    unsigned int stuId;
    string stuName;
    bool operator < (const tagStudentInfo &stuInfo) const
    {
        if(stuId != stuInfo.stuId)//按照sduId排序,若stuId相同,则按照stuName排序
        {
            return stuId < stuInfo.stuId;
        }
        else
        {
            return stuName.compare(stuInfo.stuName) < 0;//这句写的非常好!!之前也一直在寻找这种写法,它出现了,还是要多读书。。
        }
    }
}StudentInfo;

string strs[5] = {"apple", "xiaomi", "meizu", "oppo", "vivo"};

/* 第一种方法,用insert函数插入pair数据*/
void initMapByPair(map<StudentInfo, int> &mapStu, unsigned int size)
{
    StudentInfo si = {0, ""}; //两种方式实现初始化,一种是先声明后赋值,另一种直接在循环中初始化。不能混用!!为啥??
    for(unsigned int i = 0; i < size; i++)
    {
        //StudentInfo si = {5, strs[i]};
        si.stuId = i + 1;
        si.stuName = strs[i];
        mapStu.insert(pair<StudentInfo, int>(si, i + 90));
    }
}

void printMapStu(map<StudentInfo, int> mapStu)
{
    map<StudentInfo, int>::iterator it = mapStu.begin();
    for(; it != mapStu.end(); it++)
    {
        cout << it->first.stuId << "," << it->first.stuName << "," << it->second << endl;//使用first,second取出map的key及value
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    map<StudentInfo, int> mapStudent;//以学生信息映射考试成绩
    initMapByPair(mapStudent, 5);

    printMapStu(mapStudent);

    return 0;
}

运行结果:

1,apple,90
2,xiaomi,91
3,meizu,92
4,oppo,93
5,vivo,94


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值