多维容器按列组合元素
来源:互联网 发布:C语言如何创建线程 编辑:程序博客网 时间:2024/04/29 18:54
<pre name="code" class="cpp">// alg2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"//昨天碰到一个文件,有这么一个std::vector<std::vector<std::string>> //现在需要将每一列的数据进行组合//按照普通写法,每个vector的长度是知道的直接//for(int lvl1;.....)// for(int lvl2;...)//for(int lvl3,...)//但问题是第一层的长度是变长,所以无法按照vector写出。//木有办法啊,代码还是要写,还是要将结果组合出来//通过递归来完成操作。//made by davidsu33 2014-6-25#include <boost/config/warning_disable.hpp>#include <vector>#include <string>#include <iostream>#include <assert.h>//解法1,递归void get_combine(std::vector<std::vector<std::string>>& src, std::vector<std::string>& result, std::vector<int> & index){assert(index.size() == src.size());std::string aline;for (int i=0; i<index.size(); ++i){aline += src[i][index[i]];if (i != index.size()-1){aline += "-";}}result.push_back(aline);//索引进行转动移位++index[index.size()-1];//const int lastColSize = src[index.size()-1].size();for (int i=index.size()-1; i>=0; --i){if (0 == index[i] % src[i].size()){if (i == 0){return; //达到上限,无法移动}index[i] = 0;++index[i-1]; //进位}else{break; //继续处理}}get_combine(src, result, index);}int _tmain(int argc, _TCHAR* argv[]){std::vector<std::string> v1, v2;v1.push_back("aa");v1.push_back("bb");v1.push_back("cc");v1.push_back("dd");v2.push_back("ee");v2.push_back("gg");v2.push_back("ff");v2.push_back("hh");std::vector<std::vector<std::string>> v;v.push_back(v1);v.push_back(v2);//std::vector<std::vector...中存的索引//类似密码表0001 0002,初始化为0000,然后//最低位达到该组的最大则上一位进一std::vector<int> index(v.size(), 0);std::vector<std::string> result;get_combine(v, result, index);//---组合结果输出-----for (int i=0; i<result.size(); ++i){std::cout<<result[i]<<std::endl;}//解决方案2,while循环std::vector<std::string> result2;for (int i=0; i<index.size(); ++i){index[i] = 0;}bool bExit = false;//const int lastColSize = v[v.size()-1].size();while (true){std::string aline;for (int i=0; i<index.size(); ++i){aline += v[i][index[i]];if (i != index.size()-1){aline += "-";}}result2.push_back(aline);++index[index.size()-1];for (int i=index.size()-1; i>=0; --i){if (0 == index[i] % v[i].size()){if (i == 0){bExit = true;break; //达到上限,无法移动}index[i] = 0;++index[i-1]; //进位}else{break; //继续处理}}if (bExit){break;}}getchar();return 0;}
4 0
- 多维容器按列组合元素
- 删除容器重复元素并排列
- Java 多维数组组合算法
- 容器元素
- 处理多维数组的列
- Jquery组合form元素为json格式,asp.net反序列化
- Jquery 组合form元素为json格式,asp.net反序列化
- php 按元素值获取最佳元素组合
- 使用容器的概念理解多维数组和多维空间
- Matlab 按列排序 去掉重复元素
- 组合数组、复制数组、打印多维数组
- js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合
- SQL列的组合
- GridView动态组合列
- java 按行遍历比按列遍历快,打印多维数组
- 元素与容器都是容器
- 散列容器
- 一个多维数组所有元素输出问题
- Flex 正则表达式 电话、邮箱验证
- 10.C语言和设计模式(中介者模式)
- 微信公共服务平台开发(.Net 的实现)1-------认证“成为开发者”
- 一个字符串中求最长单词
- TCP 协议原理
- 多维容器按列组合元素
- 《学习bash》笔记--定制用户环境
- 生活美好的句子
- Python时间戳的使用
- 微信公共服务平台开发(.Net 的实现)2-------获得ACCESSTOKEN
- 屏幕设置
- IPC$入侵完全指令
- 英语集合625
- 浅谈iOS开发中code review(代码审查)