c++)배열을 정렬할 때 질문합니다..

익명 사용자의 이미지

. 0 ~ 100까지 임의의 자연수로 채워져 있는 10x10 Matrix를 int**형 변수에 저장해 출력하고
Matrix를 행 단위로 오름차순 정렬한 후 재 출력, 행의 총 합을 기준으로 오름차순으로 정렬한
후 재 출력하는 프로그램을 작성하시오. 이 때 행의 총 합을 기준으로 정렬할 때 값을 직접 바
꾸지 않고 포인터가 가리키는 주소를 바꿔 정렬한다.

이 문제를 풀려는데 주소를 직접바꾸려하면 오류가 엄처아게 나더군요..
도움 요청합니다 ㅠㅠ

익명 사용자의 이미지

원래 이런 숙제성 질문글은 잘 안해주는데,
이번엔 제가 모처럼 C++20의 std::ranges 라이브러리를 공부 중이라 한번 해봤습니다.

정말 사랑스러운 라이브러리에요. 코드를 깔끔하게 만들어 주죠.

C++20을 지원하는 컴파일러에서 빌드해야 합니다.

#include <iostream>
#include <array>
#include <memory>
#include <random>
#include <algorithm>
 
using Row = std::array<int, 10>;
using Matrix = std::array<std::unique_ptr<Row>, 10>;
 
static int uniform_random_integer() {
	static constexpr int min = 0, max = 100;
 
	static std::random_device r;
	static std::default_random_engine engine{ r() };
	static std::uniform_int_distribution<int> uniform_dist(min, max);
 
	return uniform_dist(engine);
}
 
static std::ostream& operator<<(std::ostream& os, const Matrix& m) {
	std::ranges::for_each(m, [&os](const auto& r) { std::ranges::for_each(*r, [&os](const auto& elem) { os << elem << ' '; }); os << '\n'; });
 
	return os;
}
 
int main() {
	Matrix m;
 
	std::ranges::generate(m, []() { auto r = std::make_unique<Row>(); std::ranges::generate(*r, uniform_random_integer); return r; });
	std::cout << "initial matrix:\n" << m << '\n';
 
	std::ranges::for_each(m, [](const auto& r) { std::ranges::sort(*r); });
	std::cout << "after in-row sorting:\n" << m << '\n';
 
	std::ranges::sort(m, {}, [](const auto& r) { int sum = 0; std::ranges::for_each(*r, [&sum](const auto& elem) { sum += elem; }); return sum; });
	std::cout << "after row sorting:\n" << m << '\n';
 
	return 0;
}
Anti-Lock의 이미지

잘 봤습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.