c++ - 组合相同的唯一 ID 项目

标签 c++ sorting

<分区>

我有一个列表,例如:

1 a
2 b
3 c
3 d
4 e
5 f

我希望它转移到相同的唯一 ID 上

1 a
2 b
3 c d
4 e
5 f

这是我的代码,很多项目都是已知的,但我就是写不出可以传递列表输入的函数。

#include <vector>
#include <string>
#include <fstream>
#include <iostream>
#include <stdlib.h>

using namespace std;

vector<int> transaction_id;
vector<int> item_id;

vector<vector<int> > transaction_table;
vector<int> items_for_each_row;
vector<int> temp_items_for_each_row;

    int real_id = 0;
    int rows_count = 1;


    while(rows_count < orig_line_count){

        while(rows_count < orig_line_count){
            if(transaction_id[real_id] == transaction_id[real_id+1]){
                rows_count++;
                real_id++;
            }else{
                break;
            }
        }

        for(i=0; 0 < rows_count; i++){
            items_for_each_row.push_back(item_id[real_id]);
            transaction_table.push_back(items_for_each_row);
            real_id++;
        }
        rows_count = 1;
    }


cout << transaction_table[1][0];

最佳答案

您可以使用 std::map存储std::vector<char>对于每个整数。整数值是 map 的键。每个键包含一个字符 vector :

std::map<int, std::vector<char>> mp;
mp.emplace(1, std::vector<char>{'a'});
mp.emplace(2, std::vector<char>{'b'});
mp.emplace(3, std::vector<char>{'c', 'd'});
mp.emplace(4, std::vector<char>{'e'});
mp.emplace(5, std::vector<char>{'f'});

for (const auto &map_element : mp)
{
    //map_element.first is map's key (1,2,3,4,5)
    cout << map_element.first << " = ";

    //map_element.second is a vector containing letters
    for (const auto &ch : map_element.second)
        cout << ch << " ";

    cout << "\n";
}

或使用 std::multimap

std::multimap<int, char> m;
m.emplace(1, 'a');
m.emplace(2, 'b');
m.emplace(3, 'c');
m.emplace(3, 'd');
m.emplace(4, 'e');
m.emplace(5, 'f');

for (int i = 0; i <= 5; i++)
{
    if (!m.count(i))
        continue;

    std::pair<
        std::multimap<int, char>::iterator,
        std::multimap<int, char>::iterator> pr;

    pr = m.equal_range(i);

    auto it = pr.first;
    cout << (*it).first << " = ";

    for (it = pr.first; it != pr.second; ++it)
        cout << (*it).second << " ";

    cout << "\n";
}

根据数据,您还可以使用 std::map<char, int> .但这假设 char是 map 的键,每个字符出现不超过一次。每个字符都可以与任何数字相关联。

关于c++ - 组合相同的唯一 ID 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396144/

相关文章:

c++ - Direct2D 接口(interface)和模糊文本问题

c++ - Web应用程序图像处理

c++ - for_each 将字符串连接到 vector 中的所有字符串

c++ - 从内部类引用模板

按另一个顺序对向量重新排序

javascript - 按值对 JavaScript 对象排序

c - 使用结构内的字符串进行选择排序

c++ - 是否可以通过 const 引用获取参数,同时禁止转换以便不传递临时变量?

javascript - 按日期javascript对JSON数据进行排序

java - 对 ArrayList 中的对象进行排序会产生意想不到的结果