我编写了以下代码:
namespace bcra {
// The value type of a data item.
using value_t = long;
/// This class represents a single Bar Chart.
class BarChart
{
//=== Definition
public:
/// Represents a single bar information.
struct BarItem
{
string label; //!< Bar label.
value_t value; //!< Bar value.
string category; //!< Bar category.
BarItem( string l, value_t v, string c ) : label{l}, value{v}, category{c}
{/*empty*/}
};
//== Data members
public:
/// The collection of bars items
std::vector< BarItem > bars;
};
}
int main()
{
BarChart m_barChart;
// open file txt
m_barChart.bars.push_back(...);
// close file txt
// ....
// ....
// ....
// creating a vector where I'm going to take a certain range from that main vector.
std::vector<BarChart::BarItem> bar_s;
for (auto i{ count_value }; i < (count_value + n_linhas); ++i)
{
bar_s.push_back(m_barChart.bars[i]);
}
// ....
// ...
// MY PROBLEM
std::vector < value_t>::iterator inicio2; ??????
std::vector<value_t>::iterator fim2; ??????
inicio2 = bar_s.begin(); ????????
//
// ...
sort(bar_s.begin(), bar_s.end(), compare);
我的目标如下:m_barChart将具有以下结构(string, int, string)的文本文件中的所有数据,我想做的是创建一个新的向量,我把这个更大的向量的范围(到目前为止我已经成功了),最大的问题是,我想得到这个另一个向量(bar_s),并与迭代器排序它去得到整数值,交换bar_s[0] (string, int, string)与bar_s[1](…)的所有对象,如果它更大。
要做到这一点,我需要begin()只对整数值(如=>m_bars.begin()。价值??)????我不知道该怎么办了。
在过去,这可以通过一个合适的比较函数来解决,但在现代c++中,您将使用投影:
https://en.cppreference.com/w/cpp/algorithm/ranges/sort