You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问vector<multiset<char>>中的元素并实现分组输出?

解决C++分组存储multiset到vector及遍历输出问题

问题根源

你的代码存在三个核心问题:

  1. 分组存储逻辑错误:当multiset的大小达到5时,仅将其插入一次vector,但没有清空当前multiset,导致后续元素继续追加到同一个集合中,最终vector里只会有一个包含全部10个元素的multiset。
  2. showItem函数未实现:没有编写遍历vector中每个multiset元素的逻辑,无法输出内容。
  3. 不必要的动态内存分配:用new创建multiset容易引发内存泄漏,直接使用栈上对象更安全高效。

修正后的完整代码

#include <iostream>
#include <set>
#include <vector>
#include <array>

using namespace std;

class MyCharector {
    vector<multiset<char>> vp;
public:
    // 空析构函数可省略,编译器会自动生成默认实现
    ~MyCharector() = default;

    void addToVector(multiset<char> s) {
        vp.push_back(s);
    }

    void getItem(const char* item, int count) {
        multiset<char> currentSet; // 用栈对象替代动态分配,避免内存泄漏
        for (int i = 0; i < count; ++i) {
            currentSet.insert(item[i]);
            // 每满5个元素就存入vector并清空当前集合
            if (currentSet.size() == 5) {
                addToVector(currentSet);
                currentSet.clear();
            }
        }
        // 处理剩余不足5个的元素(适配总数不是5倍数的场景)
        if (!currentSet.empty()) {
            addToVector(currentSet);
        }
    }

    void showItem() {
        // 嵌套范围for遍历vector中的每个multiset及其元素
        for (const auto& ms : vp) {
            for (char c : ms) {
                cout << c << " ";
            }
            cout << endl; // 每组输出后换行
        }
    }
};

int main(int argc, const char* argv[]) {
    MyCharector my;
    array<char,10> item = { 'a','a','e','d','g','f','c','c','h','b' };
    
    my.getItem(item.data(), item.size()); // 传递元素总数,增强代码健壮性
    my.showItem();

    return 0;
}

关键修改说明

  1. 分组逻辑修复:每次multiset满5个元素时,将其添加到vector后立即调用clear()清空,确保后续元素存入新的集合。同时增加了剩余元素的处理逻辑,适配元素总数不是5倍数的场景。
  2. 遍历输出实现:showItem中使用嵌套范围for循环,外层遍历vector中的每个multiset,内层遍历集合中的字符,每组输出完成后换行,符合你要求的每行5个元素的格式。
  3. 内存优化:移除了动态分配的multiset,改用栈上局部对象,避免内存泄漏,同时代码更简洁。
  4. 代码健壮性提升:getItem函数新增了元素总数参数,不再硬编码10,适配不同长度的输入。

输出结果(multiset会自动按字符顺序排序):

a a d e g 
b c c f h 

内容的提问来源于stack exchange,提问作者Hys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:00:58