排名工具-Ranking 1.0 不指定 2007/12/25

| |
说明:将左边输入框中的数值排名,一行一个,排名后将名次显示在右边输入框中。需要配合Excel来使用本工具。
用到了标准库中的map和multimap,自动排序,真的非常好用!
这个工具主要用于教师对学生分数的排名。比如:
97  7
100  1
100  1
100  1
100  1
92  9
97  7
100  1
98  6
89  10
下载文件 (已下载 73 次)
// first:待排序的分数; second:序号
typedef std::multimap<double, int>     MMAP;
// first:序号; second:名次
typedef std::map<int, CString>      MAP;

TCHAR szBuf[20];
MMAP mmap;
int nTotal = m_wndSrc.GetLineCount();
for (int i = 0; i < nTotal; i++)
{
    ZeroMemory(szBuf, sizeof(szBuf));
    m_wndSrc.GetLine(i, szBuf, _countof(szBuf));
    if (szBuf[0] == 20) continue;
    mmap.insert(MMAP::value_type(_tstoi(szBuf), i));
}

MAP map;
int i = 1, j = 1;
CString str;
if (IsDlgButtonChecked(IDC_Desc))
{
    const MMAP::const_iterator iterBegin = --mmap.begin();
    for (MMAP::iterator iter = --mmap.end(); iter != iterBegin; iter--)
    {
        str.Format(_T("%d"), i);
        map.insert(MAP::value_type(iter->second, str));
        // 递增名次
        j++;
        MMAP::iterator it = iter;
        --it;
        if (it != iterBegin && iter->first != (it)->first) i = j;
    }
}
else
{
    const MMAP::const_iterator iterEnd = mmap.end();
    for (MMAP::iterator iter = mmap.begin(); iter != iterEnd; iter++)
    {
        str.Format(_T("%d"), i);
        map.insert(MAP::value_type(iter->second, str));
        // 递增名次
        j++;
        MMAP::iterator it = iter;
        ++it;
        if (it != iterEnd && iter->first != (it)->first) i = j;
    }
}
发表评论

昵称

网址

电邮

打开HTML 打开UBB 表情 打开表情 隐藏 记住我 [注册]