multimap-upper_bound

本文介绍了一个使用C++ multimap来统计特定范围内单词数量的方法。通过读取文件中的单词,并利用multimap的数据结构,程序能够高效地统计首字母为'a'或'A'的单词数量,并演示了如何使用lower_bound和upper_bound函数来查找指定范围内的单词。
////////////////////////////////////////
//      2018/05/07 21:35:38
//      multimap-upper_bound

// returns an iterator to the first element greater than a certain value

#include <iostream>
#include <map>
#include <string>
#include <fstream>

using namespace std;

int main(){
    typedef multimap<char, string> M1;
    typedef M1::value_type v_t1;
    M1 m1;

    typedef multimap<string, char, less<string>> M2;
    typedef M2::value_type v_t2;
    M2 m2;

    string word;
    int counter = 0;
    ifstream In(".\\word.txt");

    if (In.good()){
        while (true){
            getline(In, word);
            char ch = word.at(0);
            // file is sorted
            if (ch != 'A' && ch != 'a'){
                break;
            }else{
                // for conting of words
                m1.insert(v_t1(ch,word));
                // for upper_lower bound
                m2.insert(v_t2(word, ch));
            }
        counter++;
        }
        In.close();
    }

    cout << "System Dictionary consists " << counter << " words, with first letter 'a' or 'A'" << endl;

    cout << m1.count('A') << " words starts with 'A'" << endl;
    cout << m1.count('a') << " words starts with 'a'" << endl;

    M2::iterator low = m2.lower_bound("aba");
    M2::iterator upp = m2.upper_bound("abe");

    cout << "Range of the words from 'aba' to 'abe':" << endl;
    while (low != upp){
        cout << low->first << endl;
        low++;
    }
    return 0;
}

/*
OUTPUT:
    System Dictionary consists 61 words, with first letter 'a' or 'A'
    14 words starts with 'A'
    47 words starts with 'a'
    Range of the words from 'aba' to 'abe':
    aback
    abase
    abash
    abate
    abbey
*/ 

word.txt
https://download.youkuaiyun.com/download/qwq1503/10387744

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值