当前位置: 首页 > news >正文

随机生成100组N个数并对比,C++,python,matlab,pair,std::piecewise_construct

随机生成100组N个数,数的范围是1到35,并检查是否包含目标数组的数字

python版本

import numpy as np
def count_groups_containing_obj(N, obj):# 随机生成100组N个数,数的范围是1到35groups = np.random.randint(1, 36, size=(1000, N))#print(groups)# 目标数组obj转换为numpy数组obj = np.array(obj)# 初始化包含obj的组数计数count = 0k=0ks=[]# 遍历每组,检查是否包含目标数组obj中的所有数for group in groups:k+=1# 使用np.isin检查组中的每个数是否都在obj中#print(np.all(np.isin(obj,group)))ii = np.all(np.isin(obj,group))if ii:count += 1ks.append(group)return count,ks# 输入N和obj
N = 8  # 每组的数的个数
obj = [2,3,10,16,28]  # 目标数组# 调用函数并打印结果
result,ks = count_groups_containing_obj(N, obj)
print(f"包含目标数组的组数: {result}",result/10000)
print(ks)

matlab版本

function [count, ks] = count_groups_containing_obj(N, obj)% 随机生成100组N个数,数的范围是1到35groups = randi(35, 20000, N);% 目标数组obj转换为列向量obj = obj(:);% 初始化包含obj的组数计数count = 0;ks = [];% 遍历每组,检查是否包含目标数组obj中的所有数for i = 1:size(groups, 1)group = groups(i, :);% 使用ismember检查组中的每个数是否都在obj中if all(ismember(obj, group))count = count + 1;ks = [ks; group]; %#ok<AGROW>endend% 打印结果fprintf('包含目标数组的组数: %d\n', count);fprintf('比例: %.4f%%\n', count / 20000 * 100);
end

C++版本

把这个转C++,将Python代码转换为C++代码需要一些调整,特别是由于C++中没有直接对应的NumPy库。不过,我们可以使用标准库中的容器和算法来实现类似的功能。以下是一个C++版本的实现:

#include <iostream>  
#include <vector>  
#include <cstdlib>  
#include <ctime>  
#include <algorithm>  
#include <numeric>  // 生成一个包含N个1到35之间随机数的组  
std::vector<int> generateGroup(int N) {  std::vector<int> group(N);  std::generate(group.begin(), group.end(), std::rand); // 生成随机数,但未限制范围  std::transform(group.begin(), group.end(), group.begin(), [](int x) { return x % 35 + 1; }); // 将随机数映射到1-35  return group;  
}  // 检查一个组是否包含目标数组中的所有数  
bool containsAll(const std::vector<int>& group, const std::vector<int>& obj) {  for (int num : obj) {  if (std::find(group.begin(), group.end(), num) == group.end()) {  return false;  }  }  return true;  
}  // 统计包含目标数组的组的数量  
std::pair<int, std::vector<std::vector<int>>> countGroupsContainingObj(int N, const std::vector<int>& obj) {  std::srand(std::time(0)); // 初始化随机数种子  int count = 0;  std::vector<std::vector<int>> ks;  for (int i = 0; i < 1000; ++i) {  std::vector<int> group = generateGroup(N);  if (containsAll(group, obj)) {  count++;  ks.push_back(group);  }  }  return {count, ks};  
}  int main() {  int N = 8; // 每组的数的个数  std::vector<int> obj = {2, 3, 10, 16, 28}; // 目标数组  auto [result, ks] = countGroupsContainingObj(N, obj);  double percentage = static_cast<double>(result) / 1000;  std::cout << "包含目标数组的组数: " << result << ", 百分比: " << percentage << std::endl;  // 输出包含的组(为了简洁,这里不打印所有组,只打印组数)  std::cout << "包含的组数: " << ks.size() << std::endl;  // 如果需要打印所有组,可以取消下面的注释  /*  for (const auto& group : ks) {  for (int num : group) {  std::cout << num << " ";  }  std::cout << std::endl;  }  */  return 0;  
}

几种初始化 std::pair 的方法:

在 C++ 中,std::pair 是一个模板类,用于存储两个元素的容器,这两个元素可以是不同的类型。std::pair 通常用于函数返回多个值,或者在标准库算法中作为键值对存储在容器中。

使用构造函数

#include <utility> // 或者 <pair>int main() {// 直接使用构造函数初始化std::pair<int, std::string> p(1, "one");return 0;
}

使用花括号 {} 初始化(列表初始化)

#include <utility> // 或者 <pair>int main() {// 使用花括号初始化std::pair<int, std::string> p = {1, "one"};return 0;
}

使用 make_pair 函数

#include <utility> // 包含 make_pairint main() {// 使用 make_pair 创建 pairstd::pair<int, std::string> p = std::make_pair(1, "one");return 0;
}

使用 std::piecewise_construct(C++11 及以后版本)

如果你需要使用不同的构造函数来初始化 pair 的两个元素,可以使用 std::piecewise_construct

#include <utility> // 包含 piecewise_constructstruct MyStruct {int x;std::string y;
};int main() {// 使用 piecewise_construct 初始化std::pair<MyStruct, int> p(std::piecewise_construct,std::forward_as_tuple(1), // 使用 MyStruct 的构造函数std::forward_as_tuple(2)); // 使用 int 的默认构造函数return 0;
}

在这些例子中,std::pair 被用来存储不同类型的值。你可以根据需要选择最适合你的场景的初始化方法。

std::piecewise_construct

std::piecewise_construct 是 C++11 引入的一个实用工具,它用于构造 std::pairstd::tuple 等容器时,分别对每个元素使用不同的构造参数。这在你需要使用不同类型或不同构造函数初始化容器中的元素时非常有用。

用途和场景

  1. 不同构造参数:当你需要构造一个包含多种类型的 pairtuple 时,std::piecewise_construct 允许你为每个类型提供特定的构造参数。

  2. 效率:它可以帮助避免不必要的临时对象和拷贝,特别是在构造复杂对象时。

  3. 灵活性:它提供了一种灵活的方式来构造容器,特别是当元素的构造需要不同的参数或条件时。

示例

以下是使用 std::piecewise_construct 来构造 std::pair 的示例:

#include <utility>
#include <iostream>struct Person {std::string name;int age;Person(const std::string& name, int age) : name(name), age(age) {}
};int main() {// 使用 piecewise_construct 来构造 pairstd::pair<std::string, Person> personPair(std::piecewise_construct,std::forward_as_tuple("John Doe"),  // 第一个元素的构造参数std::forward_as_tuple("John Doe", 30)  // 第二个元素的构造参数);std::cout << "Name: " << personPair.first << ", Age: " << personPair.second.age << std::endl;return 0;
}

在这个例子中,std::pair 的第一个元素是一个 std::string,只需要一个字符串参数来构造。第二个元素是 Person 类型,需要两个参数:一个字符串和一个整数。std::piecewise_construct 允许我们分别为这两个元素提供不同的构造参数。

注意事项

  • std::piecewise_construct 需要包含头文件 <utility>
  • 使用 std::forward_as_tuple 来确保参数以正确的方式传递给构造函数。
  • 这种方法在构造包含复杂对象的 pairtuple 时特别有用,尤其是当这些对象的构造函数参数不同时。

std::piecewise_construct 提供了一种高效且灵活的方式来构造包含多种类型元素的容器,使得代码更加清晰和易于维护。

相关文章:

随机生成100组N个数并对比,C++,python,matlab,pair,std::piecewise_construct

随机生成100组N个数&#xff0c;数的范围是1到35&#xff0c;并检查是否包含目标数组的数字 python版本 import numpy as np def count_groups_containing_obj(N, obj):# 随机生成100组N个数&#xff0c;数的范围是1到35groups np.random.randint(1, 36, size(1000, N))#pri…...

python爬虫获取数据后的数据提取

文章目录 python爬虫中的数据提取1.Json格式数据的数据提取2.Html格式数据提取之bs4解析器如何使用快速使用对象的种类Tagname和attributes属性NavigableString(字符串)BeautifulSoupComment 子节点.contents.children.descendants 父节点.parent.parents 节点内容.string.stri…...

前段(vue)

目录 跨域是什么&#xff1f; SprinBoot跨域的三种解决方法 JavaScript 有 8 种数据类型&#xff0c; 金额的用什么类型。 前段 区别 JQuery使用$.ajax()实现异步请求 Vue 父子组件间的三种通信方式 Vue2 和 Vue3 存在多方面的区别。 跨域是什么&#xff1f; 跨域是指…...

pairwise算法之rank svm

众所周知&#xff0c;point-wise/pair-wise/list-wise是机器学习领域中重要的几种建模方法。比如&#xff0c;最常见的分类算法使用了point-wise&#xff0c;即一条样本对应一个label(0/1)&#xff0c;根据多条正负样本&#xff0c;使用交叉熵&#xff08;cross entropy&#x…...

SAP RFC 用户安全授权

一、SAP 通讯用户 对于RFC接口的用户&#xff0c;使用五种用户类型之一的“通讯”类型&#xff0c;这种类型的用户没有登陆SAPGUI的权限。 二、对调用的RFC授权 在通讯用户内部&#xff0c;权限对象&#xff1a;S_RFC中&#xff0c;限制进一步可以调用的RFC函数授权&#xff…...

记录新建wordpress站的实践踩坑:wordpress 上传源码新建站因权限问题导致无法访问、配置新站建站向导以及插件主题上传配置的解决办法

官方文档&#xff1a;How to install WordPress – Advanced Administration Handbook | Developer.WordPress.org 但是没写权限问题&#xff0c;可以下载到 wordpress官方包。 把下载的wordpresscn的包解压并上传到服务器目录下&#xff0c;但是因为是root上传导致了权限问题…...

为啥学习数据结构和算法

基础知识就像是一座大楼的地基&#xff0c;它决定了我们的技术高度。而要想快速做出点事情&#xff0c;前提条件一定是基础能力过硬&#xff0c;“内功”要到位。 想要通关大厂面试&#xff0c;千万别让数据结构和算法拖了后腿 我们学任何知识都是为了“用”的&#xff0c;是为…...

Java - 免费图文识别_Java_免费_图片转文字_文字识别_spring ai_spring ai alibaba

本文主要是介绍借助阿里云免费的大模型额度来做高质量的图转文识别&#xff0c;图片转文字&#xff0c;或者文字识别都可以使用&#xff0c;比传统的OCR模式要直接和高效很多 。 本文使用的技术是spring ai qwen vl 。 Qwen vl有 100万Token 免费额度&#xff0c;可以用来免费…...

《JVM第6课》本地方法栈

文章目录 1 什么是本地方法1.1 本地方法的好处1.2 声明本地方法1.3 实现本地方法1. 生成头文件2. 编写C语言实现3. 编译C代码4. 运行Java程序 1.4 使用JNA1.5 总结 2 本地方法栈2.1 特点2.2 本地方法栈与Java虚拟机栈的区别2.3 本地方法栈的工作流程2.4 总结 无痛快速学习入门J…...

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…...

如何设计一个毫秒级的接口?

设计一个毫秒级的接口需要考虑多个方面&#xff0c;包括网络延迟、服务器性能、代码效率、数据库查询优化等。以下是一些建议&#xff0c;帮助你设计一个毫秒级的接口&#xff1a; 网络优化&#xff1a; 使用HTTP/2或更高版本&#xff0c;以减少连接建立和传输的开销。尽可能减…...

从语义实施工程师到大数据开发工程师的职业转型

在信息技术行业&#xff0c;随着数据驱动决策的流行和企业对大数据需求的急剧增加&#xff0c;越来越多的专业人士开始考虑将他们的技能转移到大数据领域。本文将探讨如何从一个语义实施工程师转变为一个大数据开发工程师。两者虽然都与数据密切相关&#xff0c;但在技术重点和…...

关联容器笔记

关联容器总结 有序关联容器 键值的顺序自动排序&#xff0c;键值必须支持 < 操作符 底层数据结构 使用平衡树&#xff0c;比如&#xff08;红黑树&#xff09;增删查的平均时间复杂度接近 O(log⁡n) 种类 std::set&#xff1a;集合&#xff0c;包含唯一的键元素。 std…...

在阿里云快速启动Umami玩转网页分析

阿里云计算巢提供了Umami快速部署能力&#xff0c;使用者不需要自己下载代码&#xff0c;不需要自己安装复杂的依赖&#xff0c;不需要了解底层技术&#xff0c;只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Umami&#xff0c;非技术同学也能轻松搞定。 什么是Umam…...

Linux练习作业

1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份 环境准备 主从服务器都需要进行的操作#关闭防火墙、SELinnux systemctl stop firewalld setenforce 0#软件安装 yum install bind -y实验一&#…...

FFMPEG录屏(21)--- Linux 下基于X11枚举所有可见窗口,并获取标题、图标、缩略图、进程路径等信息

在 Linux X11 下枚举窗口并获取窗口信息 在 Linux 系统中&#xff0c;X11 是一个非常流行的窗口系统&#xff0c;它提供了丰富的 API 用于管理和操作窗口。在这篇博客中&#xff0c;我们将详细介绍如何使用 X11 枚举当前系统中的窗口&#xff0c;并获取它们的标题、截图、进程…...

mybatis resultMap标签注意事项(pageHelper结合使用的坑)

背景 使用pageHelper时&#xff0c;发现分页数据异常&#xff0c;经过排查发现是resultMap 的问题。 resultMap介绍 在使用mybatis时&#xff0c;我们经常会使用在xml文件中编写一些复杂的sql语句&#xff0c;例如多表的join&#xff0c;在映射实体类时&#xff0c;又会使用…...

100种算法【Python版】第33篇——Tonelli-Shanks算法

本文目录 1 模素数下的二次剩余问题2 算法原理2.1 背景知识2.2 算法步骤3 算法示例4 python代码5 算法应用1 模素数下的二次剩余问题 在数论中,给定一个素数 p p p 和一个整数 n n n...

深度学习基础知识-全连接层

全连接&#xff08;Fully Connected&#xff0c;简称 FC&#xff09;层是深度学习神经网络中一种基本的层结构。它主要用于神经网络的最后几层&#xff0c;将高层特征映射到输出空间中。全连接层对数据的每个输入节点与每个输出节点进行连接&#xff0c;用于实现输入特征和输出…...

ffmpeg 提取mp4文件中的音频文件并保存

要从一个 MP4 文件中提取音频并保存为单独的音频文件&#xff0c;可以使用 ffmpeg 工具。以下是一个简单的命令示例&#xff1a; 命令格式 ffmpeg -i input.mp4 -vn -acodec copy output.mp3 参数解释 -i input.mp4: 指定输入文件为 input.mp4。 -vn: 禁用视频流&#xff0…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…...

免费批量Markdown转Word工具

免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具&#xff0c;支持将多个Markdown文件一键转换为Word文档。完全免费&#xff0c;无需安装&#xff0c;解压即用&#xff01; 官方网站 访问官方展示页面了解更多信息&#xff1a;http://mutou888.com/pro…...

mcts蒙特卡洛模拟树思想

您这个观察非常敏锐&#xff0c;而且在很大程度上是正确的&#xff01;您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些&#xff0c;您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”&#xff0c;这个观察非…...

视觉slam--框架

视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图&#xff1f; 建图并没有一个固定的形式和算法…...