64,690
社区成员
发帖
与我相关
我的任务
分享
#ifndef HELP_00_HPP
#define HELP_00_HPP
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <utility>
template<typename BiFunc>
class sort_pair_first
{
public:
typedef bool result_type;
template<typename T>
bool operator()(T const &lhs, T const &rhs) const
{
return BiFunc()(lhs.first, rhs.first);
}
};
template<typename BiFunc>
class sort_pair_second
{
public:
typedef bool result_type;
template<typename T>
bool operator()(T const &lhs, T const &rhs) const
{
return BiFunc()(lhs.second, rhs.second);
}
};
class dictionaryManager
{
public:
dictionaryManager() {}
void add_data(std::pair<std::string, size_t> const &data)
{
dic_array_.push_back(data);
}
void add_data(std::pair<std::string, size_t> &&data)
{
dic_array_.push_back(std::move(data) );
}
void add_and_sort_by_occur_time(std::pair<std::string, size_t> const &data)
{
add_data(data);
sort_by_occur_time();
}
void add_and_sort_by_word(std::pair<std::string, size_t> const &data)
{
add_data(data);
sort_by_word();
}
void add_and_sort_by_occur_time(std::pair<std::string, size_t> &&data)
{
add_data(std::move(data) );
sort_by_occur_time();
}
void add_and_sort_by_word(std::pair<std::string, size_t> &&data)
{
add_data(std::move(data) );
sort_by_word();
}
void print_data() const
{
std::for_each(std::begin(dic_array_), std::end(dic_array_),
[](std::pair<std::string, size_t> const &data)
{
std::cout << data.first << ", " << data.second<<std::endl;
});
}
void sort_by_occur_time()
{
std::sort(std::begin(dic_array_), std::end(dic_array_),
sort_pair_second<std::less<size_t> >() );
}
void sort_by_word()
{
std::sort(std::begin(dic_array_), std::end(dic_array_),
sort_pair_first<std::less<std::string> >() );
}
private:
dictionaryManager(dictionaryManager const&);
dictionaryManager& operator=(dictionaryManager const&);
private:
std::vector<std::pair<std::string, size_t> > dic_array_;
};
inline void test_dictionary()
{
dictionaryManager manager;
manager.add_and_sort_by_word(std::make_pair("haha", 3) );
manager.add_and_sort_by_word(std::make_pair("aa", 3) );
manager.print_data();
}
#endif // HELP_00_HPP
#ifndef HELP_00_HPP
#define HELP_00_HPP
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <utility>
template<typename BiFunc>
class sort_pair_first
{
public:
typedef bool result_type;
template<typename T>
bool operator()(T const &lhs, T const &rhs) const
{
return BiFunc()(lhs.first, rhs.first);
//return lhs.first < rhs.first;
}
};
template<typename BiFunc>
class sort_pair_second
{
public:
typedef bool result_type;
template<typename T>
bool operator()(T const &lhs, T const &rhs) const
{
return BiFunc()(lhs.second, rhs.second);
}
};
class dictionaryManager
{
public:
dictionaryManager() {}
void add_data(std::pair<std::string, size_t> const &data)
{
dic_array_.push_back(data);
}
void add_and_sort_by_occur_time(std::pair<std::string, size_t> const &data)
{
add_data(data);
sort_by_occur_time();
}
void add_and_sort_by_word(std::pair<std::string, size_t> const &data)
{
add_data(data);
sort_by_word();
}
void print_data()
{
std::for_each(std::begin(dic_array_), std::end(dic_array_),
[](std::pair<std::string, size_t> const &data)
{
std::cout << data.first << ", " << data.second<<std::endl;
});
}
void sort_by_occur_time()
{
std::sort(std::begin(dic_array_), std::end(dic_array_),
sort_pair_second<std::less<size_t> >() );
}
void sort_by_word()
{
std::sort(std::begin(dic_array_), std::end(dic_array_),
sort_pair_first<std::less<std::string> >() );
}
private:
dictionaryManager(dictionaryManager const&);
dictionaryManager& operator=(dictionaryManager const&);
private:
std::vector<std::pair<std::string, size_t> > dic_array_;
};
inline void test_dictionary()
{
dictionaryManager manager;
manager.add_and_sort_by_word(std::make_pair("haha", 3) );
manager.add_and_sort_by_word(std::make_pair("aa", 3) );
manager.print_data();
}
#endif // HELP_00_HPP